diff --git a/.eslintrc.json b/.eslintrc.json index 229d31473c6..9ad2bb4cba8 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -30,7 +30,7 @@ "no-shadow": "off", "react/display-name": [2, { "ignoreTranspilerName": false }], "react/jsx-filename-extension": 0, - "react-hooks/exhaustive-deps": 0, + "react-hooks/exhaustive-deps": "warn", "camelcase": [ 0, { @@ -69,7 +69,7 @@ "newlines-between": "always", "pathGroups": [ { - "pattern": "{@(@actions|@app|@assets|@calls|@client|@components|@constants|@context|@database|@helpers|@hooks|@init|@managers|@queries|@screens|@selectors|@share|@store|@telemetry|@typings|@test|@utils)/**,@(@constants|@i18n|@notifications|@store|@websocket)}", + "pattern": "{@(@actions|@app|@assets|@calls|@client|@components|@constants|@context|@database|@helpers|@hooks|@init|@managers|@queries|@screens|@selectors|@share|@store|@telemetry|@typings|@test|@utils)/**,@(@constants|@i18n|@store|@websocket)}", "group": "external", "position": "after" }, diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f9453b5c0b1..1effd97696b 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -27,6 +27,7 @@ Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fie - [ ] Has UI changes - [ ] Includes text changes and localization file updates - [ ] Have tested against the 5 core themes to ensure consistency between them. +- [ ] Have run E2E tests by adding label `E2E iOS tests for PR`. #### Device Information This PR was tested on: diff --git a/.github/actions/bandwidth-throttling/action.yml b/.github/actions/bandwidth-throttling/action.yml new file mode 100644 index 00000000000..70cb4b8c7e3 --- /dev/null +++ b/.github/actions/bandwidth-throttling/action.yml @@ -0,0 +1,71 @@ +name: bandwidth-throttling +description: Action to throttle the bandwidth on MacOS runner + +inputs: + test_server_host: + description: The host of the test server, no protocol + required: true + download_speed: + description: The download speed limit (in Kbit/s) + required: false + default: "3300" + upload_speed: + description: The upload speed limit (in Kbit/s) + required: false + default: "3300" + latency: + description: The latency (in ms) each way + required: false + default: "500" + disable: + description: Disable throttling + required: false + default: "false" + +runs: + using: composite + steps: + - name: disable first + if: ${{ inputs.disable == 'true' }} + shell: bash + continue-on-error: true + run: | + sudo pfctl -d + + sleep 2; + + - name: throttle bandwidth down + shell: bash + run: | + # reset pf and dnctl + sudo dnctl -q flush + sudo dnctl -q pipe flush + sudo pfctl -f /etc/pf.conf + sudo pfctl -E + + sleep 2; + + sudo pfctl -d + sudo dnctl -q flush + sudo dnctl -q pipe flush + + + echo "dummynet in from ${{ inputs.test_server_host }} to ! 127.0.0.1 pipe 1 + dummynet out from ! 127.0.0.1 to ${{ inputs.test_server_host }} pipe 2" | sudo pfctl -f - + + # pipe 1 is download + sudo dnctl pipe 1 config bw ${{ inputs.download_speed }}Kbit/s delay ${{ inputs.latency }}ms + + # pipe 2 is upload + sudo dnctl pipe 2 config bw ${{ inputs.upload_speed }}Kbit/s delay ${{ inputs.latency }}ms + + sleep 5; + + sudo pfctl -E + + sleep 5; + + - name: test curl after throttling + shell: bash + run: | + curl -o /dev/null -m 20 --retry 2 -s -w 'Total: %{time_total}s\n' 'https://${{ inputs.test_server_host }}/api/v4/system/ping?get_server_status=true' diff --git a/.github/actions/generate-specs/action.yml b/.github/actions/generate-specs/action.yml new file mode 100644 index 00000000000..0503204a32c --- /dev/null +++ b/.github/actions/generate-specs/action.yml @@ -0,0 +1,39 @@ +# Copyright 2024 Mattermost, Inc. +name: "generate-specs" +description: This action used to split Detox integration tests based on the parallelism provided + +inputs: + search_path: + description: The path to look for from within the directory + required: true + parallelism: + description: The parallelism for the tests + required: true + device_name: + description: The name of Device used for the tests + required: false + default: "iPhone 15" + device_os_version: + description: The os of the device used for the tests + required: false + default: "iOS 17.1" + +outputs: + specs: + description: The specs generated for the strategy + value: ${{ steps.generate-specs.outputs.specs }} +runs: + using: "composite" + steps: + - name: ci/generate-specs + id: generate-specs + env: + PARALLELISM: ${{ inputs.parallelism }} + SEARCH_PATH: ${{ inputs.search_path }} + DEVICE_NAME: ${{ inputs.device_name }} + DEVICE_OS_VERSION: ${{ inputs.device_os_version }} + run: | + set -e + node ${{ github.action_path }}/split-tests.js | tee output.json + echo "specs=$(cat output.json)" >> $GITHUB_OUTPUT + shell: bash diff --git a/.github/actions/generate-specs/split-tests.js b/.github/actions/generate-specs/split-tests.js new file mode 100644 index 00000000000..62f7ac14fbf --- /dev/null +++ b/.github/actions/generate-specs/split-tests.js @@ -0,0 +1,94 @@ +const fs = require('fs'); +const path = require('path'); + +class DeviceInfo { + constructor(deviceName, deviceOsVersion) { + this.deviceName = deviceName; + this.deviceOsVersion = deviceOsVersion; + } +} + +class SpecGroup { + constructor(runId, specs, deviceInfo) { + this.runId = runId; + this.specs = specs; + this.deviceName = deviceInfo.deviceName; + this.deviceOsVersion = deviceInfo.deviceOsVersion; + } +} + +class Specs { + constructor(searchPath, parallelism, deviceInfo) { + this.searchPath = searchPath; + this.parallelism = parallelism; + this.rawFiles = []; + this.groupedFiles = []; + this.deviceInfo = deviceInfo; + } + + findFiles() { + const dirPath = path.join(this.searchPath); + + const fileRegex = /\.e2e\.ts$/; + + const walkSync = (currentPath) => { + const files = fs.readdirSync(currentPath); + + files.forEach((file) => { + const filePath = path.join(currentPath, file); + const stats = fs.statSync(filePath); + + if (stats.isDirectory()) { + walkSync(filePath); + } else if (fileRegex.test(filePath)) { + const relativeFilePath = filePath.replace(dirPath + '/', ''); + const fullPath = path.join(this.searchPath, relativeFilePath); + this.rawFiles.push(fullPath); + } + }); + }; + + walkSync(dirPath); + } + + generateSplits() { + const chunkSize = Math.ceil(this.rawFiles.length / this.parallelism); + let runNo = 1; + + for (let i = 0; i < this.rawFiles.length; i += chunkSize) { + const end = Math.min(i + chunkSize, this.rawFiles.length); + const fileGroup = this.rawFiles.slice(i, end).join(' '); + const specFileGroup = new SpecGroup(runNo.toString(), fileGroup, this.deviceInfo); + this.groupedFiles.push(specFileGroup); + + if (end === this.rawFiles.length) { + break; + } + + runNo++; + } + } + + dumpSplits() { + const output = { + include: this.groupedFiles, + }; + + console.log(JSON.stringify(output)); + } +} + +function main() { + const searchPath = process.env.SEARCH_PATH; + const parallelism = parseInt(process.env.PARALLELISM, 10); + const deviceName = process.env.DEVICE_NAME; + const deviceOsVersion = process.env.DEVICE_OS_VERSION; + const deviceInfo = new DeviceInfo(deviceName, deviceOsVersion); + const specs = new Specs(searchPath, parallelism, deviceInfo); + + specs.findFiles(); + specs.generateSplits(); + specs.dumpSplits(); +} + +main(); diff --git a/.github/actions/prepare-ios-build/action.yaml b/.github/actions/prepare-ios-build/action.yaml index b772f16a4e8..57d8f026a17 100644 --- a/.github/actions/prepare-ios-build/action.yaml +++ b/.github/actions/prepare-ios-build/action.yaml @@ -14,3 +14,11 @@ runs: npm run ios-gems npm run pod-install echo "::endgroup::" + + - name: Cache Pods + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + with: + path: Pods + key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }} + restore-keys: | + ${{ runner.os }}-pods- diff --git a/.github/actions/prepare-low-bandwidth/action.yml b/.github/actions/prepare-low-bandwidth/action.yml new file mode 100644 index 00000000000..b39b77c27a4 --- /dev/null +++ b/.github/actions/prepare-low-bandwidth/action.yml @@ -0,0 +1,106 @@ +name: Prepare Low Bandwidth Environment (MacOS & iOS Simulators only) +description: prepare any workflow for low bandwidth testing + +inputs: + test_server_url: + description: The URL of the test server + required: true + device_name: + description: The iOS simulator name + required: true + download_speed: + description: The download speed limit (in Kbit/s) + required: false + default: "3300" + upload_speed: + description: The upload speed limit (in Kbit/s) + required: false + default: "3300" + latency: + description: The latency (in ms) each way + required: false + default: "500" + + +runs: + using: composite + steps: + - name: delete the zip file and trash (to free up space) + shell: bash + run: | + rm -rf mobile-artifacts/*.zip + sudo rm -rf ~/.Trash/* + + - name: check disk space + shell: bash + run: df -h + + - name: remove protocol from SITE_1_URL + id: remove-protocol + shell: bash + run: | + echo "SITE_1_HOST=${{ inputs.test_server_url }}" | sed -e 's/http:\/\///g' -e 's/https:\/\///g' >> ${GITHUB_OUTPUT} + + - name: Throttle Bandwidth 1 + id: throttle-bandwidth-1 + continue-on-error: true + uses: ./.github/actions/bandwidth-throttling + with: + test_server_host: ${{ steps.remove-protocol.outputs.SITE_1_HOST }} + download_speed: ${{ inputs.download_speed }} + upload_speed: ${{ inputs.upload_speed }} + latency: ${{ inputs.latency }} + + - name: Throttle Bandwidth 2 + if: steps.throttle-bandwidth-1.outcome != 'success' + id: throttle-bandwidth-2 + uses: ./.github/actions/bandwidth-throttling + with: + test_server_host: ${{ steps.remove-protocol.outputs.SITE_1_HOST }} + download_speed: ${{ inputs.download_speed}} + upload_speed: ${{ inputs.upload_speed }} + latency: ${{ inputs.latency }} + disable: "true" + + - name: Install mitmproxy & pm2 (process manager) + id: install-mitmproxy-pm2 + shell: bash + run: | + brew install mitmproxy + + npm i -g pm2 + + - name: Start mitmproxy via mitmdump and stop it (to get .mitmproxy folder) + shell: bash + run: | + pm2 start mitmdump --log /Users/runner/work/mattermost-mobile/mattermost-mobile/mitmdump.log -- --allow-hosts '${{ steps.remove-protocol.outputs.SITE_1_HOST }}' --ignore-hosts 'localhost' -s /Users/runner/work/mattermost-mobile/mattermost-mobile/scripts/mitmdump-flow-parsing.py + + sleep 5; + + pm2 stop mitmdump + + # we need to wait for mitmdump to stop so it'll produce the .mitmproxy folder + sleep 5; + + - name: Get simulator UDID + id: get-simulator-udid + shell: bash + run: | + simulator_udid=$(xcrun simctl list devices "${{ inputs.device_name }}" -j | jq '.devices' | jq '."com.apple.CoreSimulator.SimRuntime.iOS-17-4"[0]["udid"]') + echo "simulator_udid="$(echo $simulator_udid) >> ${GITHUB_OUTPUT} + + - name: install certificate + shell: bash + run: | + sudo security add-trusted-cert -d -p ssl -p basic -k /Library/Keychains/System.keychain ~/.mitmproxy/mitmproxy-ca-cert.pem + + # must boot first before adding root cert + xcrun simctl boot ${{ steps.get-simulator-udid.outputs.simulator_udid }} + + xcrun simctl keychain booted add-root-cert ~/.mitmproxy/mitmproxy-ca-cert.pem + + sleep 5; + + - name: show me booted simulators + shell: bash + run: xcrun simctl list devices booted | grep Booted diff --git a/.github/actions/prepare-mobile-build/action.yaml b/.github/actions/prepare-mobile-build/action.yaml index 5fdccce0d00..cf003145036 100644 --- a/.github/actions/prepare-mobile-build/action.yaml +++ b/.github/actions/prepare-mobile-build/action.yaml @@ -5,7 +5,7 @@ runs: using: composite steps: # The required ruby version is mentioned in '.ruby-version' - - uses: ruby/setup-ruby@22fdc77bf4148f810455b226c90fb81b5cbc00a7 # v 1.171.0 + - uses: ruby/setup-ruby@ff740bc00a01b3a50fffc55a1071b1060eeae9dc # v1.180.0 - name: ci/setup-fastlane-dependencies shell: bash @@ -15,5 +15,13 @@ runs: echo "::endgroup::" working-directory: ./fastlane + - name: Cache Ruby gems + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + with: + path: vendor/bundle + key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }} + restore-keys: | + ${{ runner.os }}-gems- + - name: ci/prepare-node-deps uses: ./.github/actions/prepare-node-deps diff --git a/.github/actions/prepare-node-deps/action.yaml b/.github/actions/prepare-node-deps/action.yaml index bb621a052da..31ee878383b 100644 --- a/.github/actions/prepare-node-deps/action.yaml +++ b/.github/actions/prepare-node-deps/action.yaml @@ -5,7 +5,7 @@ runs: using: composite steps: - name: ci/setup-node - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 + uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: node-version-file: ".nvmrc" cache: "npm" @@ -21,6 +21,14 @@ runs: node node_modules/\@sentry/cli/scripts/install.js echo "::endgroup::" + - name: Cache Node.js modules + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: ci/patch-npm-dependencies shell: bash run: | diff --git a/.github/actions/start-proxy/action.yml b/.github/actions/start-proxy/action.yml new file mode 100644 index 00000000000..452572d2ac0 --- /dev/null +++ b/.github/actions/start-proxy/action.yml @@ -0,0 +1,36 @@ +name: Start Proxy +description: Action to throttle the bandwidth on MacOS runner + +inputs: + test_server_url: + description: The host of the test server, no protocol + required: true + +runs: + using: composite + steps: + + - name: restart mitmdump + shell: bash + run: | + pm2 restart mitmdump + + sleep 5; + + - name: start proxy + shell: bash + run: | + networksetup -setwebproxy Ethernet "127.0.0.1" "8080" + networksetup -setsecurewebproxy Ethernet "127.0.0.1" "8080" + + sleep 5; + + networksetup -getwebproxy Ethernet + networksetup -getsecurewebproxy Ethernet + + - name: test curl and direct it into proxy + shell: bash + run: | + curl -o /dev/null -m 20 -s -w 'Total: %{time_total}s\n' '${{ inputs.test_server_url }}/api/v4/system/ping?get_server_status=true' + + curl --proxy "127.0.0.1:8080" -o /dev/null -m 20 -s -w 'Total: %{time_total}s\n' '${{ inputs.test_server_url }}/api/v4/system/ping?get_server_status=true' diff --git a/.github/workflows/build-android-beta.yml b/.github/workflows/build-android-beta.yml index 2f6bfaa6e74..e24d6c663ef 100644 --- a/.github/workflows/build-android-beta.yml +++ b/.github/workflows/build-android-beta.yml @@ -8,7 +8,7 @@ on: - build-beta-android-[0-9]+ env: - NODE_VERSION: 18.7.0 + NODE_VERSION: 20.13.1 TERM: xterm jobs: @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/test uses: ./.github/actions/test @@ -26,7 +26,7 @@ jobs: - test steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/prepare-android-build uses: ./.github/actions/prepare-android-build @@ -54,7 +54,7 @@ jobs: working-directory: ./fastlane - name: ci/upload-android-beta-build - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 with: name: android-build-beta-${{ github.run_id }} path: "*.apk" diff --git a/.github/workflows/build-android-release.yml b/.github/workflows/build-android-release.yml index 0dbdf6dfa72..cfdefb84bc0 100644 --- a/.github/workflows/build-android-release.yml +++ b/.github/workflows/build-android-release.yml @@ -8,7 +8,7 @@ on: - build-release-android-[0-9]+ env: - NODE_VERSION: 18.7.0 + NODE_VERSION: 20.13.1 TERM: xterm jobs: @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/test uses: ./.github/actions/test @@ -26,7 +26,7 @@ jobs: - test steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/prepare-android-build uses: ./.github/actions/prepare-android-build @@ -54,7 +54,7 @@ jobs: working-directory: ./fastlane - name: ci/upload-android-release-build - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 with: name: android-build-release-${{ github.run_id }} path: "*.apk" diff --git a/.github/workflows/build-ios-beta.yml b/.github/workflows/build-ios-beta.yml index f08c815d438..da4d289bdb4 100644 --- a/.github/workflows/build-ios-beta.yml +++ b/.github/workflows/build-ios-beta.yml @@ -9,7 +9,7 @@ on: - build-beta-sim-[0-9]+ env: - NODE_VERSION: 18.7.0 + NODE_VERSION: 20.13.1 TERM: xterm jobs: @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/test uses: ./.github/actions/test @@ -28,7 +28,7 @@ jobs: - test steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/prepare-ios-build uses: ./.github/actions/prepare-ios-build @@ -44,7 +44,7 @@ jobs: working-directory: ./fastlane - name: ci/upload-ios-pr-simulator - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 with: name: ios-build-simulator-${{ github.run_id }} path: Mattermost-simulator-x86_64.app.zip @@ -56,7 +56,7 @@ jobs: - test steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/output-ssh-private-key shell: bash @@ -93,7 +93,7 @@ jobs: working-directory: ./fastlane - name: ci/upload-ios-beta-build - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 with: name: ios-build-beta-${{ github.run_id }} path: "*.ipa" diff --git a/.github/workflows/build-ios-release.yml b/.github/workflows/build-ios-release.yml index 33034450b6f..ad1009e0860 100644 --- a/.github/workflows/build-ios-release.yml +++ b/.github/workflows/build-ios-release.yml @@ -9,7 +9,7 @@ on: - build-release-sim-[0-9]+ env: - NODE_VERSION: 18.7.0 + NODE_VERSION: 20.13.1 TERM: xterm jobs: @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/test uses: ./.github/actions/test @@ -28,7 +28,7 @@ jobs: - test steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/prepare-ios-build uses: ./.github/actions/prepare-ios-build @@ -65,7 +65,7 @@ jobs: working-directory: ./fastlane - name: ci/upload-ios-release-build - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 with: name: ios-build-release-${{ github.run_id }} path: "*.ipa" @@ -77,7 +77,7 @@ jobs: - test steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/prepare-ios-build uses: ./.github/actions/prepare-ios-build @@ -93,7 +93,7 @@ jobs: working-directory: ./fastlane - name: ci/upload-ios-pr-simulator - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 with: name: ios-build-simulator-${{ github.run_id }} path: Mattermost-simulator-x86_64.app.zip diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 1dbfc5badcb..98757478d6d 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -6,7 +6,7 @@ on: - labeled env: - NODE_VERSION: 18.7.0 + NODE_VERSION: 20.13.1 TERM: xterm jobs: @@ -15,7 +15,7 @@ jobs: if: ${{ github.event.label.name == 'Build Apps for PR' || github.event.label.name == 'Build App for iOS' || github.event.label.name == 'Build App for Android' }} steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: ref: ${{ github.event.pull_request.head.sha }} - name: ci/test @@ -28,7 +28,7 @@ jobs: - test steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: ref: ${{ github.event.pull_request.head.sha }} @@ -60,7 +60,7 @@ jobs: working-directory: ./fastlane - name: ci/upload-ios-pr-build - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 with: name: ios-build-pr-${{ github.run_id }} path: "*.ipa" @@ -72,7 +72,7 @@ jobs: - test steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: ref: ${{ github.event.pull_request.head.sha }} @@ -94,7 +94,7 @@ jobs: working-directory: ./fastlane - name: ci/upload-android-pr-build - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 with: name: android-build-pr-${{ github.run_id }} path: "*.apk" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f0b9350383..b9cecf7ec89 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ on: pull_request: env: - NODE_VERSION: 18.7.0 + NODE_VERSION: 20.13.1 TERM: xterm jobs: @@ -16,6 +16,6 @@ jobs: runs-on: ubuntu-22.04 steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/test uses: ./.github/actions/test diff --git a/.github/workflows/compatibility-matrix-testing.yml b/.github/workflows/compatibility-matrix-testing.yml new file mode 100644 index 00000000000..7b7cac9e2b3 --- /dev/null +++ b/.github/workflows/compatibility-matrix-testing.yml @@ -0,0 +1,129 @@ +name: Compatibility Matrix Testing + +on: + workflow_dispatch: + inputs: + CMT_MATRIX: + description: "A JSON object representing the testing matrix" + required: true + type: string + MOBILE_VERSION: + description: "The mattermost mobile version to test" + required: true + +jobs: + ## This is picked up after the finish for cleanup + upload-cmt-server-detals: + runs-on: ubuntu-22.04 + steps: + - name: cmt/generate-instance-details-file + run: echo '${{ inputs.CMT_MATRIX }}' > instance-details.json + + - name: cmt/upload-instance-details + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: instance-details.json + path: instance-details.json + retention-days: 1 + + calculate-commit-hash: + runs-on: ubuntu-22.04 + outputs: + MOBILE_SHA: ${{ steps.repo.outputs.MOBILE_SHA }} + steps: + - name: cmt/checkout-mobile + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + ref: ${{ inputs.MOBILE_VERSION }} + + - name: cmt/calculate-mattermost-sha + id: repo + run: echo "MOBILE_SHA=$(git rev-parse HEAD)" >> ${GITHUB_OUTPUT} + + update-initial-status: + runs-on: ubuntu-22.04 + needs: + - calculate-commit-hash + steps: + - uses: mattermost/actions/delivery/update-commit-status@746563b58e737a17a8ceb00b84a813b9e6e1b236 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + repository_full_name: ${{ github.repository }} + commit_sha: ${{ needs.calculate-commit-hash.outputs.MOBILE_SHA }} + context: e2e/compatibility-matrix-testing + description: "Compatibility Matrix Testing for ${{ inputs.MOBILE_VERSION }} version" + status: pending + + # Input follows the below schema + # { + # "server": [ + # { + # "version": "9.6.1", + # "url": "https://delivery-cmt-8467830017-9-6-1.test.mattermost.cloud/" + # }, + # { + # "version": "9.5.2", + # "url": "https://delivery-cmt-8467830017-9-5-2.test.mattermost.cloud/" + # } + # ] + # } + build-ios-simulator: + runs-on: macos-14 + needs: + - update-initial-status + steps: + - name: Checkout Repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + ref: ${{ inputs.MOBILE_VERSION }} + + - name: Prepare iOS Build + uses: ./.github/actions/prepare-ios-build + + - name: Build iOS Simulator + env: + TAG: "${{ inputs.MOBILE_VERSION }}" + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_BETA_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_BETA_AWS_SECRET_ACCESS_KEY }}" + GITHUB_TOKEN: "${{ secrets.MM_MOBILE_GITHUB_TOKEN }}" + run: bundle exec fastlane ios simulator --env ios.simulator + working-directory: ./fastlane + + - name: Upload iOS Simulator Build + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: ios-build-simulator-${{ github.run_id }} + path: Mattermost-simulator-x86_64.app.zip + + detox-e2e: + name: mobile-cmt-${{ matrix.server.version }} + uses: ./.github/workflows/e2e-detox-template.yml + needs: + - build-ios-simulator + strategy: + fail-fast: false + matrix: ${{ fromJson(inputs.CMT_MATRIX) }} + secrets: inherit + with: + run-ios-tests: true + run-type: "RELEASE" + MM_TEST_SERVER_URL: ${{ matrix.server.url }} + MOBILE_VERSION: ${{ inputs.MOBILE_VERSION }} + + update-final-status: + runs-on: ubuntu-22.04 + needs: + - calculate-commit-hash + - detox-e2e + steps: + - uses: mattermost/actions/delivery/update-commit-status@main + env: + GITHUB_TOKEN: ${{ github.token }} + with: + repository_full_name: ${{ github.repository }} + commit_sha: ${{ needs.calculate-commit-hash.outputs.MOBILE_SHA }} + context: e2e/compatibility-matrix-testing + description: Compatibility Matrix Testing for ${{ inputs.MOBILE_VERSION }} version + status: ${{ needs.detox-e2e.outputs.STATUS }} + target_url: ${{ needs.detox-e2e.outputs.TARGET_URL }} diff --git a/.github/workflows/e2e-detox-pr.yml b/.github/workflows/e2e-detox-pr.yml new file mode 100644 index 00000000000..41429ecb27f --- /dev/null +++ b/.github/workflows/e2e-detox-pr.yml @@ -0,0 +1,106 @@ +# Can be used to run Detox E2E tests on pull requests for the Mattermost mobile app with low bandwidth +# by using 'E2E iOS tests for PR (LBW 1)' instead. +name: Detox E2E Tests PR + +on: + pull_request: + branches: + - main + types: + - labeled + +concurrency: + group: "${{ github.workflow }}-${{ github.event.pull_request.number }}-${{ github.event.label.name }}" + cancel-in-progress: true + +jobs: + update-initial-status: + runs-on: ubuntu-22.04 + if: contains(github.event.label.name, 'E2E iOS tests for PR') + steps: + - uses: mattermost/actions/delivery/update-commit-status@main + env: + GITHUB_TOKEN: ${{ github.token }} + with: + repository_full_name: ${{ github.repository }} + commit_sha: ${{ github.event.pull_request.head.sha }} + context: e2e/detox-tests + description: Detox tests for mattermost mobile app have started ... + status: pending + + build-ios-simulator: + runs-on: macos-14 + needs: + - update-initial-status + steps: + - name: Checkout Repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + - name: Prepare iOS Build + uses: ./.github/actions/prepare-ios-build + + - name: Build iOS Simulator + env: + TAG: "${{ github.event.pull_request.head.sha }}" + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_BETA_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_BETA_AWS_SECRET_ACCESS_KEY }}" + GITHUB_TOKEN: "${{ secrets.MM_MOBILE_GITHUB_TOKEN }}" + run: bundle exec fastlane ios simulator --env ios.simulator + working-directory: ./fastlane + + - name: Upload iOS Simulator Build + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: ios-build-simulator-${{ github.run_id }} + path: Mattermost-simulator-x86_64.app.zip + + run-ios-tests-on-pr: + name: iOS Mobile Tests on PR + uses: ./.github/workflows/e2e-detox-template.yml + needs: + - build-ios-simulator + with: + run-ios-tests: true + run-type: "PR" + MOBILE_VERSION: ${{ github.event.pull_request.head.sha }} + low_bandwidth_mode: ${{ contains(github.event.label.name,'LBW') && true || false }} + secrets: inherit + + update-final-status: + runs-on: ubuntu-22.04 + needs: + - run-ios-tests-on-pr + steps: + - uses: mattermost/actions/delivery/update-commit-status@main + env: + GITHUB_TOKEN: ${{ github.token }} + with: + repository_full_name: ${{ github.repository }} + commit_sha: ${{ github.event.pull_request.head.sha }} + context: e2e/detox-tests + description: Completed with ${{ needs.run-ios-tests-on-pr.outputs.FAILURES }} failures + status: ${{ needs.run-ios-tests-on-pr.outputs.STATUS }} + target_url: ${{ needs.run-ios-tests-on-pr.outputs.TARGET_URL }} + + e2e-remove-label: + runs-on: ubuntu-22.04 + needs: + - run-ios-tests-on-pr + steps: + - name: e2e/remove-label-from-pr + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + continue-on-error: true # Label might have been removed manually + with: + script: | + const iosLabel = 'E2E iOS tests for PR'; + const androidLabel = 'E2E Android tests for PR'; + context.payload.pull_request.labels.forEach(label => { + if (label.name.includes(iosLabel)) { + github.rest.issues.removeLabel({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + name: label.name, + }); + } + }); diff --git a/.github/workflows/e2e-detox-release.yml b/.github/workflows/e2e-detox-release.yml new file mode 100644 index 00000000000..bb604de6085 --- /dev/null +++ b/.github/workflows/e2e-detox-release.yml @@ -0,0 +1,74 @@ +name: Detox E2E Tests Release + +on: + push: + branches: + - release-* + +jobs: + update-initial-status: + runs-on: ubuntu-22.04 + steps: + - uses: mattermost/actions/delivery/update-commit-status@main + env: + GITHUB_TOKEN: ${{ github.token }} + with: + repository_full_name: ${{ github.repository }} + commit_sha: ${{ github.sha }} + context: e2e/detox-tests + description: Detox tests for mattermost mobile app have started ... + status: pending + + build-ios-simulator: + runs-on: macos-14 + needs: + - update-initial-status + steps: + - name: Checkout Repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + - name: Prepare iOS Build + uses: ./.github/actions/prepare-ios-build + + - name: Build iOS Simulator + env: + TAG: "${{ github.ref }}" + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_BETA_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_BETA_AWS_SECRET_ACCESS_KEY }}" + GITHUB_TOKEN: "${{ secrets.MM_MOBILE_GITHUB_TOKEN }}" + run: bundle exec fastlane ios simulator --env ios.simulator + working-directory: ./fastlane + + - name: Upload iOS Simulator Build + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: ios-build-simulator-${{ github.run_id }} + path: Mattermost-simulator-x86_64.app.zip + + run-ios-tests-on-release: + name: iOS Mobile Tests on Release + uses: ./.github/workflows/e2e-detox-template.yml + needs: + - build-ios-simulator + with: + run-ios-tests: true + run-type: "RELEASE" + record_tests_in_zephyr: 'true' + MOBILE_VERSION: ${{ github.ref }} + secrets: inherit + + update-final-status: + runs-on: ubuntu-22.04 + needs: + - run-ios-tests-on-release + steps: + - uses: mattermost/actions/delivery/update-commit-status@main + env: + GITHUB_TOKEN: ${{ github.token }} + with: + repository_full_name: ${{ github.repository }} + commit_sha: ${{ github.sha }} + context: e2e/detox-tests + description: Completed with ${{ needs.run-ios-tests-on-release.outputs.FAILURES }} failures + status: ${{ needs.run-ios-tests-on-release.outputs.STATUS }} + target_url: ${{ needs.run-ios-tests-on-release.outputs.TARGET_URL }} diff --git a/.github/workflows/e2e-detox-scheduled.yml b/.github/workflows/e2e-detox-scheduled.yml new file mode 100644 index 00000000000..10786f4d6c0 --- /dev/null +++ b/.github/workflows/e2e-detox-scheduled.yml @@ -0,0 +1,73 @@ +name: Detox E2E Tests (Scheduled) + +on: + schedule: + - cron: "0 0 * * 4,5" # Wednesday and Thursday midnight + +jobs: + update-initial-status: + runs-on: ubuntu-22.04 + steps: + - uses: mattermost/actions/delivery/update-commit-status@main + env: + GITHUB_TOKEN: ${{ github.token }} + with: + repository_full_name: ${{ github.repository }} + commit_sha: ${{ github.sha }} + context: e2e/detox-tests + description: Detox tests for mattermost mobile app have started ... + status: pending + + build-ios-simulator: + runs-on: macos-14 + needs: + - update-initial-status + steps: + - name: Checkout Repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + - name: Prepare iOS Build + uses: ./.github/actions/prepare-ios-build + + - name: Build iOS Simulator + env: + TAG: "${{ github.ref }}" + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_BETA_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_BETA_AWS_SECRET_ACCESS_KEY }}" + GITHUB_TOKEN: "${{ secrets.MM_MOBILE_GITHUB_TOKEN }}" + run: bundle exec fastlane ios simulator --env ios.simulator + working-directory: ./fastlane + + - name: Upload iOS Simulator Build + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: ios-build-simulator-${{ github.run_id }} + path: Mattermost-simulator-x86_64.app.zip + + run-ios-tests-on-main-scheduled: + name: iOS Mobile Tests on Main (Scheduled) + uses: ./.github/workflows/e2e-detox-template.yml + needs: + - build-ios-simulator + with: + run-ios-tests: true + run-type: "MAIN" + record_tests_in_zephyr: 'true' + MOBILE_VERSION: ${{ github.ref }} + secrets: inherit + + update-final-status: + runs-on: ubuntu-22.04 + needs: + - run-ios-tests-on-main-scheduled + steps: + - uses: mattermost/actions/delivery/update-commit-status@main + env: + GITHUB_TOKEN: ${{ github.token }} + with: + repository_full_name: ${{ github.repository }} + commit_sha: ${{ github.sha }} + context: e2e/detox-tests + description: Completed with ${{ needs.run-ios-tests-on-main-scheduled.outputs.FAILURES }} failures + status: ${{ needs.run-ios-tests-on-main-scheduled.outputs.STATUS }} + target_url: ${{ needs.run-ios-tests-on-main-scheduled.outputs.TARGET_URL }} diff --git a/.github/workflows/e2e-detox-template.yml b/.github/workflows/e2e-detox-template.yml new file mode 100644 index 00000000000..659f793e20a --- /dev/null +++ b/.github/workflows/e2e-detox-template.yml @@ -0,0 +1,304 @@ +name: Detox E2E Tests Template + +on: + workflow_call: + inputs: + MM_TEST_SERVER_URL: + description: "The test server URL" + required: false + type: string + MM_TEST_USER_NAME: + description: "The admin username of the test instance" + required: false + type: string + MM_TEST_PASSWORD: + description: "The admin password of the test instance" + required: false + type: string + MOBILE_VERSION: + description: "The mobile version to test" + required: false + default: ${{ github.head_ref || github.ref }} + type: string + run-ios-tests: + description: "Run iOS tests" + required: true + type: boolean + run-type: + type: string + required: false + default: "PR" + testcase_failure_fatal: + description: "Should failures be considered fatal" + required: false + type: boolean + default: false + record_tests_in_zephyr: + description: "Record test results in Zephyr, typically for nightly and release runs" + required: false + type: string + default: 'false' + ios_device_name: + description: "iPhone simulator name" + required: false + type: string + default: "iPhone 14" + ios_device_os_name: + description: "iPhone simulator OS version" + required: false + type: string + default: "iOS 17.0" + low_bandwidth_mode: + description: "Enable low bandwidth mode" + required: false + type: boolean + default: false + outputs: + STATUS: + value: ${{ jobs.generate-report.outputs.STATUS }} + TARGET_URL: + value: ${{ jobs.generate-report.outputs.TARGET_URL }} + FAILURES: + value: ${{ jobs.generate-report.outputs.FAILURES }} + +env: + AWS_REGION: "us-east-1" + ADMIN_EMAIL: ${{ secrets.MM_MOBILE_E2E_ADMIN_EMAIL }} + ADMIN_USERNAME: ${{ secrets.MM_MOBILE_E2E_ADMIN_USERNAME }} + ADMIN_PASSWORD: ${{ secrets.MM_MOBILE_E2E_ADMIN_PASSWORD }} + # BRANCH: ${{ github.head_ref || github.ref_name }} + # COMMIT_HASH: ${{ github.sha }} + DEVICE_NAME: ${{ inputs.ios_device_name }} + DEVICE_OS_VERSION: ${{ inputs.ios_device_os_name }} + DETOX_AWS_S3_BUCKET: "mattermost-detox-report" + HEADLESS: "true" + TYPE: ${{ inputs.run-type }} + PULL_REQUEST: "https://github.com/mattermost/mattermost-mobile/pull/${{ github.event.number }}" + SITE_1_URL: ${{ inputs.MM_TEST_SERVER_URL || 'https://mobile-e2e-site-1.test.mattermost.cloud' }} + SITE_2_URL: "https://mobile-e2e-site-2.test.mattermost.cloud" + SITE_3_URL: "https://mobile-e2e-site-3.test.mattermost.cloud" + ZEPHYR_ENABLE: ${{ inputs.record_tests_in_zephyr }} + JIRA_PROJECT_KEY: "MM" + ZEPHYR_API_KEY: ${{ secrets.MM_MOBILE_E2E_ZEPHYR_API_KEY }} + ZEPHYR_FOLDER_ID: "3233873" + TEST_CYCLE_LINK_PREFIX: ${{ secrets.MM_MOBILE_E2E_TEST_CYCLE_LINK_PREFIX }} + WEBHOOK_URL: ${{ secrets.MM_MOBILE_E2E_WEBHOOK_URL }} + FAILURE_MESSAGE: "Something has failed" + +jobs: + generate-specs: + runs-on: ubuntu-22.04 + if: ${{ inputs.run-ios-tests }} + outputs: + specs: ${{ steps.generate-specs.outputs.specs }} + build_id: ${{ steps.resolve-device.outputs.BUILD_ID }} + mobile_sha: ${{ steps.resolve-device.outputs.MOBILE_SHA }} + mobile_ref: ${{ steps.resolve-device.outputs.MOBILE_REF }} + workflow_hash: ${{ steps.resolve-device.outputs.WORKFLOW_HASH }} + steps: + - name: Checkout Repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + ref: ${{ inputs.MOBILE_VERSION }} + + - name: Set Build ID + id: resolve-device + run: | + BUILD_ID="${{ github.run_id }}-${{ env.DEVICE_NAME }}-${{ env.DEVICE_OS_VERSION}}" + WORKFLOW_HASH=$(tr -dc a-z0-9 > ${GITHUB_OUTPUT} + + echo "BUILD_ID=$(echo ${BUILD_ID} | sed 's/ /_/g')" >> ${GITHUB_OUTPUT} + echo "MOBILE_SHA=$(git rev-parse HEAD)" >> ${GITHUB_OUTPUT} + echo "MOBILE_REF=$(git rev-parse --abbrev-ref HEAD)" >> ${GITHUB_OUTPUT} + + - name: Generate Test Specs + id: generate-specs + uses: ./.github/actions/generate-specs + with: + parallelism: 10 + search_path: detox/e2e/test + device_name: ${{ env.DEVICE_NAME }} + device_os_version: ${{ env.DEVICE_OS_VERSION }} + + e2e-ios: + name: ios-detox-e2e-${{ matrix.runId }}-${{ matrix.deviceName }}-${{ matrix.deviceOsVersion }} + if: ${{ inputs.run-ios-tests }} + runs-on: macos-14 + continue-on-error: true + timeout-minutes: ${{ inputs.low_bandwidth_mode && 80 || 40 }} + env: + IOS: true + needs: + - generate-specs + strategy: + fail-fast: false + matrix: ${{ fromJSON(needs.generate-specs.outputs.specs) }} + steps: + - name: Checkout Repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + ref: ${{ inputs.MOBILE_VERSION }} + + - name: ci/prepare-node-deps + uses: ./.github/actions/prepare-node-deps + + - name: Install Homebrew Dependencies + run: | + brew tap wix/brew + brew install applesimutils + + - name: Download iOS Simulator Build + uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 + with: + name: ios-build-simulator-${{ github.run_id }} + path: mobile-artifacts + + - name: Unzip iOS Simulator Build + run: unzip -o mobile-artifacts/*.zip -d mobile-artifacts/ + + - name: Prepare Low Bandwidth Environment + id: prepare-low-bandwidth + uses: ./.github/actions/prepare-low-bandwidth + if: ${{ inputs.low_bandwidth_mode }} + with: + test_server_url: ${{ env.SITE_1_URL }} + device_name: ${{ env.DEVICE_NAME }} + # all these value should be configurable + download_speed: "3300" + upload_speed: "3300" + latency: "500" + + - name: Start React Native Metro Server + run: npm run start & + + - name: Install Detox Dependencies + run: cd detox && npm i + + - name: Start Proxy + if: ${{ inputs.low_bandwidth_mode }} + id: start-proxy + uses: ./.github/actions/start-proxy + with: + test_server_url: ${{ env.SITE_1_URL }} + + - name: Run Detox E2E Tests + continue-on-error: true # Label might have been removed manually + run: | + cd detox + npm run detox:config-gen + npm run e2e:ios-test -- ${{ matrix.specs }} + env: + DETOX_DEVICE_TYPE: ${{ env.DEVICE_NAME }} + DETOX_OS_VERSION: ${{ env.DEVICE_OS_VERSION }} + LOW_BANDWIDTH_MODE: ${{ inputs.low_bandwidth_mode }} + + + - name: reset network settings + if: ${{ inputs.low_bandwidth_mode || failure() }} + run: | + networksetup -setwebproxystate Ethernet "off" + networksetup -setsecurewebproxystate Ethernet "off" + + if (sudo pfctl -q -sa | grep 'Status: Enabled') then sudo pfctl -d; fi + if (command -v pm2 &> /dev/null) then pm2 stop mitmdump; fi + + sleep 5; + + - name: Upload mitmdump Flow Output + if: ${{ inputs.low_bandwidth_mode }} + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: ios-mitmdump-flow-output-${{ needs.generate-specs.outputs.workflow_hash }}-${{ matrix.runId }} + path: | + /Users/runner/work/mattermost-mobile/mattermost-mobile/flow-output.csv + /Users/runner/work/mattermost-mobile/mattermost-mobile/mitmdump.log + + - name: Upload iOS Test Report + if: always() + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: ios-results-${{ needs.generate-specs.outputs.workflow_hash }}-${{ matrix.runId }} + path: detox/artifacts/ + + generate-report: + runs-on: ubuntu-22.04 + if: ${{ inputs.run-ios-tests}} + needs: + - generate-specs + - e2e-ios + outputs: + TARGET_URL: ${{ steps.set-url.outputs.TARGET_URL }} + STATUS: ${{ steps.determine-status.outputs.STATUS }} + FAILURES: ${{ steps.summary.outputs.FAILURES }} + steps: + - name: Checkout Repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + ref: ${{ inputs.MOBILE_VERSION }} + + - name: ci/prepare-node-deps + uses: ./.github/actions/prepare-node-deps + + - name: Download All Artifacts + uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 + with: + path: detox/artifacts/ + pattern: ios-results-${{ needs.generate-specs.outputs.workflow_hash }}-* + + - name: Generate Report Path + id: s3 + run: | + path="${{ needs.generate-specs.outputs.build_id }}-${{ needs.generate-specs.outputs.mobile_sha }}-${{ needs.generate-specs.outputs.mobile_ref }}" + echo "path=$(echo "${path}" | sed 's/\./-/g')" >> ${GITHUB_OUTPUT} + + - name: Save report Detox Dependencies + id: report-link + run: | + cd detox + npm ci + npm run e2e:save-report + env: + DETOX_AWS_ACCESS_KEY_ID: ${{ secrets.MM_MOBILE_DETOX_AWS_ACCESS_KEY_ID }} + DETOX_AWS_SECRET_ACCESS_KEY: ${{ secrets.MM_MOBILE_DETOX_AWS_SECRET_ACCESS_KEY }} + IOS: ${{ inputs.run-ios-tests }} + BUILD_ID: ${{ needs.generate-specs.outputs.build_id }} + REPORT_PATH: ${{ steps.s3.outputs.path }} + ## These are needed for the MM Webhook report + COMMIT_HASH: ${{ needs.generate-specs.outputs.mobile_sha }} + BRANCH: ${{ needs.generate-specs.outputs.mobile_ref }} + + - name: Calculate failures + id: summary + run: | + echo "FAILURES=$(cat detox/artifacts/summary.json | jq .stats.failures)" >> ${GITHUB_OUTPUT} + echo "PASSES=$(cat detox/artifacts/summary.json | jq .stats.passes)" >> ${GITHUB_OUTPUT} + echo "SKIPPED=$(cat detox/artifacts/summary.json | jq .stats.skipped)" >> ${GITHUB_OUTPUT} + echo "TOTAL=$(cat detox/artifacts/summary.json | jq .stats.tests)" >> ${GITHUB_OUTPUT} + echo "ERRORS=$(cat detox/artifacts/summary.json | jq .stats.errors)" >> ${GITHUB_OUTPUT} + echo "PERCENTAGE=$(cat detox/artifacts/summary.json | jq .stats.passPercent)" >> ${GITHUB_OUTPUT} + + - name: Set Target URL + id: set-url + run: | + echo "TARGET_URL=https://${{ env.DETOX_AWS_S3_BUCKET }}.s3.amazonaws.com/${{ steps.s3.outputs.path }}/jest-stare/ios-report.html" >> ${GITHUB_OUTPUT} + + - name: Determine Status + id: determine-status + run: | + if [[ ${{ steps.summary.outputs.failures }} -gt 0 && "${{ inputs.testcase_failure_fatal }}" == "true" ]]; then + echo "STATUS=failure" >> ${GITHUB_OUTPUT} + else + echo "STATUS=success" >> ${GITHUB_OUTPUT} + fi + + - name: Generate Summary + run: | + echo "| Tests | Passed :white_check_mark: | Failed :x: | Skipped :fast_forward: | Errors :warning: | " >> ${GITHUB_STEP_SUMMARY} + echo "|:---:|:---:|:---:|:---:|:---:|" >> ${GITHUB_STEP_SUMMARY} + echo "| ${{ steps.summary.outputs.TOTAL }} | ${{ steps.summary.outputs.PASSES }} | ${{ steps.summary.outputs.FAILURES }} | ${{ steps.summary.outputs.SKIPPED }} | ${{ steps.summary.outputs.ERRORS }} |" >> ${GITHUB_STEP_SUMMARY} + echo "" >> ${GITHUB_STEP_SUMMARY} + echo "You can check the full report [here](${{ steps.set-url.outputs.TARGET_URL }})" >> ${GITHUB_STEP_SUMMARY} + echo "There was **${{ steps.summary.outputs.PERCENTAGE }}%** success rate." >> ${GITHUB_STEP_SUMMARY} diff --git a/.github/workflows/github-release.yml b/.github/workflows/github-release.yml index a888ad588a5..c3d1701df84 100644 --- a/.github/workflows/github-release.yml +++ b/.github/workflows/github-release.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/test uses: ./.github/actions/test @@ -20,7 +20,7 @@ jobs: - test steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/prepare-ios-build uses: ./.github/actions/prepare-ios-build @@ -42,7 +42,7 @@ jobs: working-directory: ./fastlane - name: ci/upload-ios-unsigned - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 with: path: Mattermost-unsigned.ipa name: Mattermost-unsigned.ipa @@ -53,7 +53,7 @@ jobs: - test steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: ci/prepare-android-build uses: ./.github/actions/prepare-android-build @@ -68,7 +68,7 @@ jobs: working-directory: ./fastlane - name: ci/upload-android-unsigned-build - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 with: path: Mattermost-unsigned.apk name: Mattermost-unsigned.apk @@ -80,16 +80,19 @@ jobs: - build-android-unsigned steps: - name: ci/checkout-repo - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: ruby/setup-ruby@22fdc77bf4148f810455b226c90fb81b5cbc00a7 # v1.171.0 + - uses: ruby/setup-ruby@ff740bc00a01b3a50fffc55a1071b1060eeae9dc # v1.180.0 - name: release/setup-fastlane-dependencies run: bundle install working-directory: ./fastlane - name: ci/download-artifacts - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 + uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + with: + path: ${{ github.workspace }} + merge-multiple: true - name: release/create-github-release env: diff --git a/.gitignore b/.gitignore index 600fc0dfad0..a7a100c2d17 100644 --- a/.gitignore +++ b/.gitignore @@ -115,3 +115,9 @@ launch.json # Temporary files created by Metro to check the health of the file watcher .metro-health-check* + +libraries/**/**/build +libraries/**/**/.build + +# Android sounds +android/app/src/main/res/raw/* \ No newline at end of file diff --git a/.node-version b/.node-version index aacb5181047..297d47ba070 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -18.17 +20.13.1 \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index aacb5181047..f203ab89b79 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.17 +20.13.1 diff --git a/.solidarity b/.solidarity index f7aa6366bb9..61768427b42 100644 --- a/.solidarity +++ b/.solidarity @@ -39,7 +39,7 @@ { "rule": "cli", "binary": "pod", - "semver": "1.14.3", + "semver": "1.15.2", "platform": "darwin" } ], diff --git a/ios/Gemfile b/Gemfile similarity index 54% rename from ios/Gemfile rename to Gemfile index 8c4e3a14622..813f0e00da6 100644 --- a/ios/Gemfile +++ b/Gemfile @@ -1,3 +1,3 @@ source "https://rubygems.org" -gem "cocoapods", "1.14.3" +gem "cocoapods", "1.15.2" diff --git a/ios/Gemfile.lock b/Gemfile.lock similarity index 80% rename from ios/Gemfile.lock rename to Gemfile.lock index d4d156e907d..50421c9b867 100644 --- a/ios/Gemfile.lock +++ b/Gemfile.lock @@ -1,9 +1,11 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.6) + CFPropertyList (3.0.7) + base64 + nkf rexml - activesupport (7.1.2) + activesupport (7.1.3.4) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) @@ -13,19 +15,19 @@ GEM minitest (>= 5.1) mutex_m tzinfo (~> 2.0) - addressable (2.8.5) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) atomos (0.1.3) base64 (0.2.0) - bigdecimal (3.1.4) + bigdecimal (3.1.8) claide (1.1.0) - cocoapods (1.14.3) + cocoapods (1.15.2) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.14.3) + cocoapods-core (= 1.15.2) cocoapods-deintegrate (>= 1.0.3, < 2.0) cocoapods-downloader (>= 2.1, < 3.0) cocoapods-plugins (>= 1.0.0, < 2.0) @@ -40,7 +42,7 @@ GEM nap (~> 1.0) ruby-macho (>= 2.3.0, < 3.0) xcodeproj (>= 1.23.0, < 2.0) - cocoapods-core (1.14.3) + cocoapods-core (1.15.2) activesupport (>= 5.0, < 8) addressable (~> 2.8) algoliasearch (~> 1.0) @@ -60,48 +62,49 @@ GEM netrc (~> 0.11) cocoapods-try (1.2.0) colored2 (3.1.2) - concurrent-ruby (1.2.2) + concurrent-ruby (1.3.4) connection_pool (2.4.1) - drb (2.2.0) - ruby2_keywords + drb (2.2.1) escape (0.0.4) ethon (0.16.0) ffi (>= 1.15.0) - ffi (1.16.3) + ffi (1.17.0) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) httpclient (2.8.3) - i18n (1.14.1) + i18n (1.14.5) concurrent-ruby (~> 1.0) - json (2.6.3) - minitest (5.20.0) + json (2.7.2) + minitest (5.25.1) molinillo (0.8.0) mutex_m (0.2.0) nanaimo (0.3.0) nap (1.1.0) netrc (0.11.0) + nkf (0.2.0) public_suffix (4.0.7) - rexml (3.2.6) + rexml (3.3.5) + strscan ruby-macho (2.5.1) - ruby2_keywords (0.0.5) + strscan (3.1.0) typhoeus (1.4.1) ethon (>= 0.9.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - xcodeproj (1.23.0) + xcodeproj (1.25.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) - rexml (~> 3.2.4) + rexml (>= 3.3.2, < 4.0) PLATFORMS ruby DEPENDENCIES - cocoapods (= 1.14.3) + cocoapods (= 1.15.2) BUNDLED WITH - 2.3.26 + 2.5.11 diff --git a/NOTICE.txt b/NOTICE.txt index c51b917e1ba..4694f2b59be 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -517,6 +517,42 @@ Stack navigator component for iOS and Android with animated transitions and gest +--- + +## @rneui/base + +This product contains '@rneui/base' by RNE Core Team. + +Cross Platform React Native UI Toolkit + +* HOMEPAGE: + * https://reactnativeelements.com/ + +* LICENSE: MIT + + +The MIT License (MIT) + +Copyright (c) 2021 Nader Dabit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + --- ## @sentry/react-native @@ -913,6 +949,365 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +--- + +## expo + +This product contains 'expo' by Expo. + +The Expo SDK + +* HOMEPAGE: + * https://github.com/expo/expo/tree/main/packages/expo + +* LICENSE: MIT + +The MIT License (MIT) + +Copyright (c) 2015-present 650 Industries, Inc. (aka Expo) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +## expo-application + +This product contains 'expo-application' by 650 Industries, Inc.. + +A universal module that gets native application information such as its ID, app name, and build version at runtime + +* HOMEPAGE: + * https://docs.expo.dev/versions/latest/sdk/application/ + +* LICENSE: MIT + +The MIT License (MIT) + +Copyright (c) 2015-present 650 Industries, Inc. (aka Expo) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +## expo-crypto + +This product contains 'expo-crypto' by 650 Industries, Inc.. + +Expo universal module for crypto + +* HOMEPAGE: + * https://docs.expo.dev/versions/latest/sdk/crypto/ + +* LICENSE: MIT + +The MIT License (MIT) + +Copyright (c) 2015-present 650 Industries, Inc. (aka Expo) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +## expo-device + +This product contains 'expo-device' by 650 Industries, Inc.. + +A universal module that gets physical information about the device running the application + +* HOMEPAGE: + * https://docs.expo.dev/versions/latest/sdk/device/ + +* LICENSE: MIT + +The MIT License (MIT) + +Copyright (c) 2015-present 650 Industries, Inc. (aka Expo) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +## expo-image + +This product contains 'expo-image' by 650 Industries, Inc.. + +A cross-platform, performant image component for React Native and Expo with Web support + +* HOMEPAGE: + * https://docs.expo.dev/versions/latest/sdk/image/ + +* LICENSE: MIT + +The MIT License (MIT) + +Copyright (c) 2015-present 650 Industries, Inc. (aka Expo) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +## expo-linear-gradient + +This product contains 'expo-linear-gradient' by 650 Industries, Inc.. + +Provides a React component that renders a gradient view. + +* HOMEPAGE: + * https://docs.expo.dev/versions/latest/sdk/linear-gradient/ + +* LICENSE: MIT + +The MIT License (MIT) + +Copyright (c) 2015-present 650 Industries, Inc. (aka Expo) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +## expo-store-review + +This product contains 'expo-store-review' by 650 Industries, Inc.. + +ExpoStoreReview standalone module + +* HOMEPAGE: + * https://docs.expo.dev/versions/latest/sdk/storereview/ + +* LICENSE: MIT + +The MIT License (MIT) + +Copyright (c) 2015-present 650 Industries, Inc. (aka Expo) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +## expo-video-thumbnails + +This product contains 'expo-video-thumbnails' by 650 Industries, Inc.. + +ExpoVideoThumbnails standalone module + +* HOMEPAGE: + * https://docs.expo.dev/versions/latest/sdk/video-thumbnails/ + +* LICENSE: MIT + +The MIT License (MIT) + +Copyright (c) 2015-present 650 Industries, Inc. (aka Expo) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +## expo-web-browser + +This product contains 'expo-web-browser' by 650 Industries, Inc.. + +Provides access to the system's web browser and supports handling redirects. On iOS, it uses SFSafariViewController or SFAuthenticationSession, depending on the method you call, and on Android it uses ChromeCustomTabs. As of iOS 11, SFSafariViewController + +* HOMEPAGE: + * https://docs.expo.dev/versions/latest/sdk/webbrowser/ + +* LICENSE: MIT + +The MIT License (MIT) + +Copyright (c) 2015-present 650 Industries, Inc. (aka Expo) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +## fflate + +This product contains 'fflate' by Arjun Barrett. + +High performance (de)compression in an 8kB package + +* HOMEPAGE: + * https://101arrowz.github.io/fflate + +* LICENSE: MIT + +MIT License + +Copyright (c) 2023 Arjun Barrett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + --- ## fuse.js @@ -1163,42 +1558,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---- - -## jail-monkey - -This product contains 'jail-monkey' by Gant Laborde. - -A React Native module for identifying jail-broken, rooted, or mock locations on iOS and Android - -* HOMEPAGE: - * https://github.com/GantMan/jail-monkey#readme - -* LICENSE: MIT - -MIT License - -Copyright (c) 2017 Gant Laborde - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --- ## mime-db @@ -1272,39 +1631,24 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -## pako +## node-html-parser -This product contains 'pako'. +This product contains 'node-html-parser' by Xiaoyi Shi. -zlib port to javascript - fast, modularized, with browser support +A very fast HTML parser, generating a simplified DOM, with basic element query support. * HOMEPAGE: - * https://github.com/nodeca/pako#readme + * https://github.com/taoqf/node-fast-html-parser -* LICENSE: (MIT AND Zlib) - -(The MIT License) - -Copyright (C) 2014-2017 by Vitaly Puzrin and Andrei Tuputcyn +* LICENSE: MIT -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Copyright 2019 Tao Qiufeng -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- @@ -1457,234 +1801,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -## react-native - -This product contains 'react-native' by Facebook. - -A framework for building native apps using React - -* HOMEPAGE: - * https://github.com/facebook/react-native#readme - -* LICENSE: MIT - -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - ---- - -## react-native-background-timer - -This product contains 'react-native-background-timer' by Dávid Ocetník. - -Emit event periodically (even when app is in the background). - -* HOMEPAGE: - * https://github.com/ocetnik/react-native-background-timer - -* LICENSE: MIT - -The MIT License (MIT) - -Copyright (c) 2016 Dávid Ocetník - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - ---- - -## react-native-button - -This product contains 'react-native-button' by James Ide. - -A button for React apps - -* HOMEPAGE: - * https://github.com/ide/react-native-button - -* LICENSE: MIT - -The MIT License (MIT) - -Copyright (c) 2015 James Ide - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - ---- - -## react-native-calendars - -This product contains a modified version of 'react-native-calendars' by Wix.com. - -React Native Calendar Components - -* HOMEPAGE: - * https://github.com/wix/react-native-calendars#readme - -* LICENSE: MIT - -The MIT License (MIT) - -Copyright (c) 2017 Wix.com - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - ---- - -## react-native-create-thumbnail - -This product contains a modified version of 'react-native-create-thumbnail' by Souvik Ghosh. - -iOS/Android thumbnail generator with support for both local and remote videos. react-native-create-thumbnail is a wrapper around AVAssetImageGenerator (iOS) and MediaMetadataRetriever (Android) - -* HOMEPAGE: - * https://github.com/souvik-ghosh/react-native-create-thumbnail - -* LICENSE: MIT - -MIT License - -Copyright (c) 2019 Souvik Ghosh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - ---- - -## react-native-device-info - -This product contains a modified version of 'react-native-device-info' by Rebecca Hughes. - -Get device information using react-native - -* HOMEPAGE: - * https://github.com/react-native-community/react-native-device-info#readme - -* LICENSE: MIT - -The MIT License (MIT) - -Copyright (c) 2015 Rebecca Hughes - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - ---- - -## react-native-document-picker +## react-native -This product contains 'react-native-document-picker' by Elyx0. +This product contains 'react-native' by Facebook. -A react native interface to access Documents from dropbox google drive, iCloud +A framework for building native apps using React * HOMEPAGE: - * https://github.com/Elyx0/react-native-document-picker#readme + * https://github.com/facebook/react-native#readme * LICENSE: MIT MIT License -Copyright (c) 2016 Elyx0 +Copyright (c) Facebook, Inc. and its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -1704,23 +1834,22 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --- -## react-native-dotenv +## react-native-background-timer -This product contains 'react-native-dotenv' by Kemal Ahmed. +This product contains 'react-native-background-timer' by Dávid Ocetník. -Load environment variables using import statements. +Emit event periodically (even when app is in the background). * HOMEPAGE: - * https://github.com/goatandsheep/react-native-dotenv + * https://github.com/ocetnik/react-native-background-timer * LICENSE: MIT -MIT License +The MIT License (MIT) -Copyright (c) 2017 Bertrand Marron +Copyright (c) 2016 Dávid Ocetník Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -1743,18 +1872,20 @@ SOFTWARE. --- -## react-native-elements +## react-native-document-picker -This product contains 'react-native-elements' by React Native Elements. +This product contains 'react-native-document-picker' by Elyx0. -Cross Platform React Native UI Toolkit +A react native interface to access Documents from dropbox google drive, iCloud * HOMEPAGE: - * https://github.com/react-native-elements/react-native-elements + * https://github.com/Elyx0/react-native-document-picker#readme -* LICENSE: The MIT License (MIT) +* LICENSE: MIT + +MIT License -Copyright (c) 2016 Nader Dabit +Copyright (c) 2016 Elyx0 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -1777,20 +1908,20 @@ SOFTWARE. --- -## react-native-exception-handler +## react-native-dotenv -This product contains 'react-native-exception-handler' by master-atul. +This product contains 'react-native-dotenv' by Kemal Ahmed. -A react native module that lets you to register a global error handler that can capture fatal/non fatal uncaught exceptions. +Load environment variables using import statements. * HOMEPAGE: - * https://github.com/master-atul/react-native-exception-handler + * https://github.com/goatandsheep/react-native-dotenv * LICENSE: MIT -The MIT License (MIT) +MIT License -Copyright (c) 2017 Atul +Copyright (c) 2017 Bertrand Marron Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -1813,20 +1944,20 @@ SOFTWARE. --- -## react-native-fast-image +## react-native-exception-handler -This product contains 'react-native-fast-image' by Dylan Vann. +This product contains 'react-native-exception-handler' by master-atul. -Performant React Native image component +A react native module that lets you to register a global error handler that can capture fatal/non fatal uncaught exceptions. * HOMEPAGE: - * https://github.com/DylanVann/react-native-fast-image + * https://github.com/master-atul/react-native-exception-handler * LICENSE: MIT -MIT License +The MIT License (MIT) -Copyright (c) 2017 Dylan Vann +Copyright (c) 2017 Atul Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -1881,42 +2012,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---- - -## react-native-fs - -This product contains 'react-native-fs' by Hagen Hübel. - -Native filesystem access for react-native - -* HOMEPAGE: - * https://github.com/itinance/react-native-fs - -* LICENSE: MIT - -The MIT License (MIT) - -Copyright (c) 2015 Johannes Lumpe - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --- ## react-native-gesture-handler @@ -1989,30 +2084,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---- - -## react-native-hw-keyboard-event - -This product contains 'react-native-hw-keyboard-event' by Emilio Rodriguez. - -Event handler for hardware keyboard keystrokes - -* HOMEPAGE: - * https://github.com/emilioicai/react-native-hw-keyboard-event - -* LICENSE: MIT - -MIT License - -Copyright (c) 2019 Emilio Rodriguez - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --- ## react-native-image-picker @@ -2049,42 +2120,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---- - -## react-native-in-app-review - -This product contains 'react-native-in-app-review' by Mina Samir Shafik. - -react native in app review, to rate on Play store, App Store, Generally, the in-app review flow (see figure 1 for play store, figure 2 for ios) can be triggered at any time throughout the user journey of your app. During the flow, the user has the ability - -* HOMEPAGE: - * https://github.com/MinaSamir11/react-native-in-app-review#readme - -* LICENSE: MIT - -MIT License - -Copyright (c) 2020 Mina Samir - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --- ## react-native-incall-manager @@ -2151,42 +2186,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---- - -## react-native-keyboard-tracking-view - -This product contains a modified version of 'react-native-keyboard-tracking-view' by Artal Druk. - -React Native UI component which tracks the keyboard - -* HOMEPAGE: - * https://github.com/wix/react-native-keyboard-tracking-view - -* LICENSE: MIT - -The MIT License (MIT) - -Copyright (c) 2016 Wix.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --- ## react-native-keychain @@ -2223,42 +2222,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---- - -## react-native-linear-gradient - -This product contains 'react-native-linear-gradient' by Brent Vatne. - -A element for React Native - -* HOMEPAGE: - * https://github.com/react-native-community/react-native-linear-gradient#readme - -* LICENSE: MIT - -MIT License - -Copyright (c) 2016 React Native Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --- ## react-native-localize @@ -2399,6 +2362,40 @@ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +--- + +## react-native-performance + +This product contains 'react-native-performance' by Joel Arvidsson. + +Toolchain to measure and monitor the performance of your React Native app in development, pipeline and in production. + +* HOMEPAGE: + * https://github.com/oblador/react-native-performance + +* LICENSE: MIT + +The MIT License (MIT) + +Copyright (c) 2019 - present Joel Arvidsson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. --- @@ -2814,42 +2811,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---- - -## react-native-webview - -This product contains a modified version of 'react-native-webview' by Jamon Holmgren. - -React Native WebView component for iOS, Android, and Windows 10 (coming soon) - -* HOMEPAGE: - * https://github.com/react-native-community/react-native-webview#readme - -* LICENSE: MIT - -MIT License - -Copyright (c) 2015-present, Facebook, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --- ## react-syntax-highlighter diff --git a/README.md b/README.md index 059ffc8cd8a..58e94e0d6e9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Mattermost Mobile v2 - **Minimum Server versions:** Current ESR version (9.5.0+) -- **Supported iOS versions:** 12.4+ +- **Supported iOS versions:** 13.4+ - **Supported Android versions:** 7.0+ Mattermost is an open source Slack-alternative used by thousands of companies around the world in 21 languages. Learn more at [https://mattermost.com](https://mattermost.com). diff --git a/android/app/build.gradle b/android/app/build.gradle index d7618712d10..f474f54684c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -111,8 +111,8 @@ android { applicationId "com.mattermost.rnbeta" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 522 - versionName "2.17.0" + versionCode 569 + versionName "2.22.0" testBuildType System.getProperty('testBuildType', 'debug') testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } @@ -166,6 +166,7 @@ android { matchingFallbacks = ['release'] } } + // applicationVariants are e.g. debug, release applicationVariants.all { variant -> variant.outputs.each { output -> @@ -190,7 +191,6 @@ repositories { dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") - implementation("com.facebook.react:flipper-integration") if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") @@ -198,14 +198,9 @@ dependencies { implementation jscFlavor } - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' - implementation 'io.reactivex.rxjava3:rxjava:3.1.6' - implementation 'io.reactivex.rxjava3:rxandroid:3.0.2' - implementation 'androidx.window:window-core:1.1.0' - implementation 'androidx.window:window-rxjava3:1.0.0' - implementation 'androidx.window:window:1.0.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1' implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'com.google.android.material:material:1.8.0' + implementation 'com.google.android.material:material:1.12.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation "com.google.firebase:firebase-messaging:$firebaseVersion" @@ -247,7 +242,7 @@ configurations.all { // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use -task copyDownloadableDepsToLibs(type: Copy) { +tasks.register('copyDownloadableDepsToLibs', Copy) { from configurations.implementation into 'libs' } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 7ec2c615cd8..1febc0b56ab 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,20 +1,25 @@ - + + + + - - - - + + + + + + + diff --git a/android/app/src/main/assets/certs/.gitignore b/android/app/src/main/assets/certs/.gitignore new file mode 100644 index 00000000000..86d0cb2726c --- /dev/null +++ b/android/app/src/main/assets/certs/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore \ No newline at end of file diff --git a/android/app/src/main/java/com/mattermost/helpers/Credentials.java b/android/app/src/main/java/com/mattermost/helpers/Credentials.java deleted file mode 100644 index 900434027ee..00000000000 --- a/android/app/src/main/java/com/mattermost/helpers/Credentials.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.mattermost.helpers; - -import androidx.annotation.Nullable; - -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.WritableMap; -import com.oblador.keychain.KeychainModule; - - -public class Credentials { - public static void getCredentialsForServer(ReactApplicationContext context, String serverUrl, ResolvePromise promise) { - final KeychainModule keychainModule = new KeychainModule(context); - - final WritableMap options = Arguments.createMap(); - // KeyChain module fails if `authenticationPrompt` is not set - final WritableMap authPrompt = Arguments.createMap(); - authPrompt.putString("title", "Authenticate to retrieve secret"); - authPrompt.putString("cancel", "Cancel"); - options.putMap("authenticationPrompt", authPrompt); - options.putString("service", serverUrl); - - keychainModule.getGenericPasswordForOptions(options, promise); - } - - public static String getCredentialsForServerSync(ReactApplicationContext context, String serverUrl) { - final String[] token = new String[1]; - Credentials.getCredentialsForServer(context, serverUrl, new ResolvePromise() { - @Override - public void resolve(@Nullable Object value) { - WritableMap map = (WritableMap) value; - if (map != null) { - token[0] = map.getString("password"); - String service = map.getString("service"); - assert service != null; - if (service.isEmpty()) { - String[] credentials = token[0].split(", *"); - if (credentials.length == 2) { - token[0] = credentials[0]; - } - } - } - } - }); - - return token[0]; - } -} diff --git a/android/app/src/main/java/com/mattermost/helpers/CustomPushNotificationHelper.java b/android/app/src/main/java/com/mattermost/helpers/CustomPushNotificationHelper.java index b2172509c2e..cbdb968b022 100644 --- a/android/app/src/main/java/com/mattermost/helpers/CustomPushNotificationHelper.java +++ b/android/app/src/main/java/com/mattermost/helpers/CustomPushNotificationHelper.java @@ -30,6 +30,7 @@ import androidx.core.graphics.drawable.IconCompat; import com.mattermost.rnbeta.*; +import com.mattermost.rnutils.helpers.NotificationHelper; import com.nozbe.watermelondb.WMDatabase; import java.io.IOException; @@ -57,7 +58,6 @@ public class CustomPushNotificationHelper { public static final String CHANNEL_HIGH_IMPORTANCE_ID = "channel_01"; public static final String CHANNEL_MIN_IMPORTANCE_ID = "channel_02"; public static final String KEY_TEXT_REPLY = "CAN_REPLY"; - public static final int MESSAGE_NOTIFICATION_ID = 435345; public static final String NOTIFICATION_ID = "notificationId"; public static final String NOTIFICATION = "notification"; public static final String PUSH_TYPE_MESSAGE = "message"; @@ -192,7 +192,7 @@ public static NotificationCompat.Builder createNotificationBuilder(Context conte String channelId = bundle.getString("channel_id"); String postId = bundle.getString("post_id"); String rootId = bundle.getString("root_id"); - int notificationId = postId != null ? postId.hashCode() : MESSAGE_NOTIFICATION_ID; + int notificationId = postId != null ? postId.hashCode() : NotificationHelper.INSTANCE.MESSAGE_NOTIFICATION_ID; boolean is_crt_enabled = bundle.containsKey("is_crt_enabled") && Objects.equals(bundle.getString("is_crt_enabled"), "true"); String groupId = is_crt_enabled && !android.text.TextUtils.isEmpty(rootId) ? rootId : channelId; diff --git a/android/app/src/main/java/com/mattermost/helpers/Network.java b/android/app/src/main/java/com/mattermost/helpers/Network.java index de88f8629ce..fbaee3067e1 100644 --- a/android/app/src/main/java/com/mattermost/helpers/Network.java +++ b/android/app/src/main/java/com/mattermost/helpers/Network.java @@ -8,7 +8,7 @@ import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.ReadableMap; -import com.mattermost.networkclient.APIClientModule; +import com.mattermost.networkclient.ApiClientModuleImpl; import com.mattermost.networkclient.enums.RetryTypes; import okhttp3.HttpUrl; @@ -16,13 +16,13 @@ public class Network { - private static APIClientModule clientModule; + private static ApiClientModuleImpl clientModule; private static final WritableMap clientOptions = Arguments.createMap(); private static final Promise emptyPromise = new ResolvePromise(); public static void init(Context context) { - final ReactApplicationContext reactContext = (APIClientModule.context == null) ? new ReactApplicationContext(context) : APIClientModule.context; - clientModule = new APIClientModule(reactContext); + final ReactApplicationContext reactContext = (ApiClientModuleImpl.context == null) ? new ReactApplicationContext(context) : ApiClientModuleImpl.context; + clientModule = new ApiClientModuleImpl(reactContext); createClientOptions(); } diff --git a/android/app/src/main/java/com/mattermost/helpers/NotificationHelper.java b/android/app/src/main/java/com/mattermost/helpers/NotificationHelper.java deleted file mode 100644 index 2c53ce9660d..00000000000 --- a/android/app/src/main/java/com/mattermost/helpers/NotificationHelper.java +++ /dev/null @@ -1,312 +0,0 @@ -package com.mattermost.helpers; - -import android.app.Notification; -import android.app.NotificationManager; -import android.content.Context; -import android.content.SharedPreferences; -import android.content.pm.PackageInfo; -import android.os.Bundle; -import android.service.notification.StatusBarNotification; - - -import androidx.core.app.NotificationManagerCompat; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Objects; - -public class NotificationHelper { - public static final String PUSH_NOTIFICATIONS = "PUSH_NOTIFICATIONS"; - public static final String NOTIFICATIONS_IN_GROUP = "notificationsInGroup"; - private static final String VERSION_PREFERENCE = "VERSION_PREFERENCE"; - - public static void cleanNotificationPreferencesIfNeeded(Context context) { - try { - PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); - String version = String.valueOf(pInfo.versionCode); - String storedVersion = null; - SharedPreferences pSharedPref = context.getSharedPreferences(VERSION_PREFERENCE, Context.MODE_PRIVATE); - if (pSharedPref != null) { - storedVersion = pSharedPref.getString("Version", ""); - } - - if (!version.equals(storedVersion)) { - if (pSharedPref != null) { - SharedPreferences.Editor editor = pSharedPref.edit(); - editor.putString("Version", version); - editor.apply(); - } - - Map inputMap = new HashMap<>(); - saveMap(context, inputMap); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static int getNotificationId(Bundle notification) { - final String postId = notification.getString("post_id"); - final String channelId = notification.getString("channel_id"); - - int notificationId = CustomPushNotificationHelper.MESSAGE_NOTIFICATION_ID; - if (postId != null) { - notificationId = postId.hashCode(); - } else if (channelId != null) { - notificationId = channelId.hashCode(); - } - - return notificationId; - } - - public static StatusBarNotification[] getDeliveredNotifications(Context context) { - final NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - return notificationManager.getActiveNotifications(); - } - - public static boolean addNotificationToPreferences(Context context, int notificationId, Bundle notification) { - try { - boolean createSummary = true; - final String serverUrl = notification.getString("server_url"); - final String channelId = notification.getString("channel_id"); - final String rootId = notification.getString("root_id"); - final boolean isCRTEnabled = notification.containsKey("is_crt_enabled") && notification.getString("is_crt_enabled").equals("true"); - - final boolean isThreadNotification = isCRTEnabled && !android.text.TextUtils.isEmpty(rootId); - final String groupId = isThreadNotification ? rootId : channelId; - - Map notificationsPerServer = loadMap(context); - JSONObject notificationsInServer = notificationsPerServer.get(serverUrl); - if (notificationsInServer == null) { - notificationsInServer = new JSONObject(); - } - - JSONObject notificationsInGroup = notificationsInServer.optJSONObject(groupId); - if (notificationsInGroup == null) { - notificationsInGroup = new JSONObject(); - } - - if (notificationsInGroup.length() > 0) { - createSummary = false; - } - - notificationsInGroup.put(String.valueOf(notificationId), false); - - if (createSummary) { - // Add the summary notification id as well - notificationsInGroup.put(String.valueOf(notificationId + 1), true); - } - notificationsInServer.put(groupId, notificationsInGroup); - notificationsPerServer.put(serverUrl, notificationsInServer); - saveMap(context, notificationsPerServer); - - return createSummary; - } catch(Exception e) { - e.printStackTrace(); - return false; - } - } - - public static void dismissNotification(Context context, Bundle notification) { - final boolean isCRTEnabled = notification.containsKey("is_crt_enabled") && notification.getString("is_crt_enabled").equals("true"); - final String serverUrl = notification.getString("server_url"); - final String channelId = notification.getString("channel_id"); - final String rootId = notification.getString("root_id"); - - int notificationId = getNotificationId(notification); - - if (!android.text.TextUtils.isEmpty(serverUrl) && !android.text.TextUtils.isEmpty(channelId)) { - boolean isThreadNotification = isCRTEnabled && !android.text.TextUtils.isEmpty(rootId); - String notificationIdStr = String.valueOf(notificationId); - String groupId = isThreadNotification ? rootId : channelId; - - Map notificationsPerServer = loadMap(context); - JSONObject notificationsInServer = notificationsPerServer.get(serverUrl); - if (notificationsInServer == null) { - return; - } - - JSONObject notificationsInGroup = notificationsInServer.optJSONObject(groupId); - if (notificationsInGroup == null) { - return; - } - boolean isSummary = notificationsInGroup.optBoolean(notificationIdStr); - notificationsInGroup.remove(notificationIdStr); - - NotificationManager notificationManager = context.getSystemService(NotificationManager.class); - notificationManager.cancel(notificationId); - StatusBarNotification[] statusNotifications = getDeliveredNotifications(context); - boolean hasMore = false; - - for (final StatusBarNotification status : statusNotifications) { - Bundle bundle = status.getNotification().extras; - if (isThreadNotification) { - hasMore = bundle.containsKey("root_id") && bundle.getString("root_id").equals(rootId); - } else { - hasMore = bundle.containsKey("channel_id") && bundle.getString("channel_id").equals(channelId); - } - if (hasMore) break; - } - - if (!hasMore || isSummary) { - notificationsInServer.remove(groupId); - } else { - try { - notificationsInServer.put(groupId, notificationsInGroup); - } catch (JSONException e) { - e.printStackTrace(); - } - } - - notificationsPerServer.put(serverUrl, notificationsInServer); - saveMap(context, notificationsPerServer); - } - } - - public static void removeChannelNotifications(Context context, String serverUrl, String channelId) { - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); - Map notificationsPerServer = loadMap(context); - JSONObject notificationsInServer = notificationsPerServer.get(serverUrl); - - if (notificationsInServer != null) { - notificationsInServer.remove(channelId); - notificationsPerServer.put(serverUrl, notificationsInServer); - saveMap(context, notificationsPerServer); - } - - StatusBarNotification[] notifications = getDeliveredNotifications(context); - for (StatusBarNotification sbn:notifications) { - Notification n = sbn.getNotification(); - Bundle bundle = n.extras; - String cId = bundle.getString("channel_id"); - String rootId = bundle.getString("root_id"); - boolean isCRTEnabled = bundle.containsKey("is_crt_enabled") && bundle.getString("is_crt_enabled").equals("true"); - boolean skipThreadNotification = isCRTEnabled && !android.text.TextUtils.isEmpty(rootId); - if (Objects.equals(cId, channelId) && !skipThreadNotification) { - notificationManager.cancel(sbn.getId()); - } - } - } - - public static void removeThreadNotifications(Context context, String serverUrl, String threadId) { - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); - Map notificationsPerServer = loadMap(context); - JSONObject notificationsInServer = notificationsPerServer.get(serverUrl); - - StatusBarNotification[] notifications = getDeliveredNotifications(context); - for (StatusBarNotification sbn:notifications) { - Notification n = sbn.getNotification(); - Bundle bundle = n.extras; - String rootId = bundle.getString("root_id"); - String postId = bundle.getString("post_id"); - if (Objects.equals(rootId, threadId)) { - notificationManager.cancel(sbn.getId()); - } - - if (Objects.equals(postId, threadId)) { - String channelId = bundle.getString("channel_id"); - int id = sbn.getId(); - if (notificationsInServer != null && channelId != null) { - JSONObject notificationsInChannel = notificationsInServer.optJSONObject(channelId); - if (notificationsInChannel != null) { - notificationsInChannel.remove(String.valueOf(id)); - try { - notificationsInServer.put(channelId, notificationsInChannel); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - notificationManager.cancel(id); - } - } - - if (notificationsInServer != null) { - notificationsInServer.remove(threadId); - notificationsPerServer.put(serverUrl, notificationsInServer); - saveMap(context, notificationsPerServer); - } - } - - public static void removeServerNotifications(Context context, String serverUrl) { - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); - Map notificationsPerServer = loadMap(context); - notificationsPerServer.remove(serverUrl); - saveMap(context, notificationsPerServer); - StatusBarNotification[] notifications = getDeliveredNotifications(context); - for (StatusBarNotification sbn:notifications) { - Notification n = sbn.getNotification(); - Bundle bundle = n.extras; - String url = bundle.getString("server_url"); - if (Objects.equals(url, serverUrl)) { - notificationManager.cancel(sbn.getId()); - } - } - } - - public static void clearChannelOrThreadNotifications(Context context, Bundle notification) { - final String serverUrl = notification.getString("server_url"); - final String channelId = notification.getString("channel_id"); - final String rootId = notification.getString("root_id"); - if (channelId != null) { - final boolean isCRTEnabled = notification.containsKey("is_crt_enabled") && notification.getString("is_crt_enabled").equals("true"); - // rootId is available only when CRT is enabled & clearing the thread - final boolean isClearThread = isCRTEnabled && !android.text.TextUtils.isEmpty(rootId); - - if (isClearThread) { - removeThreadNotifications(context, serverUrl, rootId); - } else { - removeChannelNotifications(context, serverUrl, channelId); - } - } - } - - - /** - * Map Structure - * - * { serverUrl: { groupId: { notification1: true, notification2: false } } } - * summary notification has a value of true - * - */ - - private static void saveMap(Context context, Map inputMap) { - SharedPreferences pSharedPref = context.getSharedPreferences(PUSH_NOTIFICATIONS, Context.MODE_PRIVATE); - if (pSharedPref != null) { - JSONObject json = new JSONObject(inputMap); - String jsonString = json.toString(); - SharedPreferences.Editor editor = pSharedPref.edit(); - editor.remove(NOTIFICATIONS_IN_GROUP).apply(); - editor.putString(NOTIFICATIONS_IN_GROUP, jsonString); - editor.apply(); - } - } - - private static Map loadMap(Context context) { - Map outputMap = new HashMap<>(); - if (context != null) { - SharedPreferences pSharedPref = context.getSharedPreferences(PUSH_NOTIFICATIONS, Context.MODE_PRIVATE); - try { - if (pSharedPref != null) { - String jsonString = pSharedPref.getString(NOTIFICATIONS_IN_GROUP, (new JSONObject()).toString()); - JSONObject json = new JSONObject(jsonString); - Iterator servers = json.keys(); - - while (servers.hasNext()) { - String serverUrl = servers.next(); - JSONObject notificationGroup = json.getJSONObject(serverUrl); - outputMap.put(serverUrl, notificationGroup); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - return outputMap; - } -} diff --git a/android/app/src/main/java/com/mattermost/helpers/PushNotificationDataHelper.kt b/android/app/src/main/java/com/mattermost/helpers/PushNotificationDataHelper.kt index dc0e00de320..08a3a3e1c98 100644 --- a/android/app/src/main/java/com/mattermost/helpers/PushNotificationDataHelper.kt +++ b/android/app/src/main/java/com/mattermost/helpers/PushNotificationDataHelper.kt @@ -4,29 +4,27 @@ import android.content.Context import android.os.Bundle import android.util.Log import com.facebook.react.bridge.Arguments - import com.facebook.react.bridge.ReadableArray import com.facebook.react.bridge.ReadableMap - -import com.mattermost.helpers.database_extension.* -import com.mattermost.helpers.push_notification.* - -import kotlinx.coroutines.* +import com.mattermost.helpers.database_extension.getDatabaseForServer +import com.mattermost.helpers.database_extension.saveToDatabase +import com.mattermost.helpers.push_notification.addToDefaultCategoryIfNeeded +import com.mattermost.helpers.push_notification.fetchMyChannel +import com.mattermost.helpers.push_notification.fetchMyTeamCategories +import com.mattermost.helpers.push_notification.fetchNeededUsers +import com.mattermost.helpers.push_notification.fetchPosts +import com.mattermost.helpers.push_notification.fetchTeamIfNeeded +import com.mattermost.helpers.push_notification.fetchThread +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withContext class PushNotificationDataHelper(private val context: Context) { - private var coroutineScope = CoroutineScope(Dispatchers.Default) - fun fetchAndStoreDataForPushNotification(initialData: Bundle, isReactInit: Boolean): Bundle? { - var result: Bundle? = null - val job = coroutineScope.launch(Dispatchers.Default) { - result = PushNotificationDataRunnable.start(context, initialData, isReactInit) + suspend fun fetchAndStoreDataForPushNotification(initialData: Bundle, isReactInit: Boolean): Bundle? { + return withContext(Dispatchers.Default) { + PushNotificationDataRunnable.start(context, initialData, isReactInit) } - runBlocking { - job.join() - } - - return result } } @@ -37,8 +35,8 @@ class PushNotificationDataRunnable { private val mutex = Mutex() suspend fun start(context: Context, initialData: Bundle, isReactInit: Boolean): Bundle? { - // for more info see: https://blog.danlew.net/2020/01/28/coroutines-and-java-synchronization-dont-mix/ mutex.withLock { + // for more info see: https://blog.danlew.net/2020/01/28/coroutines-and-java-synchronization-dont-mix/ val serverUrl: String = initialData.getString("server_url") ?: return null val db = dbHelper.getDatabaseForServer(context, serverUrl) var result: Bundle? = null @@ -50,8 +48,9 @@ class PushNotificationDataRunnable { val postId = initialData.getString("post_id") val rootId = initialData.getString("root_id") val isCRTEnabled = initialData.getString("is_crt_enabled") == "true" + val ackId = initialData.getString("ack_id") - Log.i("ReactNative", "Start fetching notification data in server=$serverUrl for channel=$channelId") + Log.i("ReactNative", "Start fetching notification data in server=$serverUrl for channel=$channelId and ack=$ackId") val receivingThreads = isCRTEnabled && !rootId.isNullOrEmpty() val notificationData = Arguments.createMap() @@ -89,7 +88,7 @@ class PushNotificationDataRunnable { getThreadList(notificationThread, postData?.getArray("threads"))?.let { val threadsArray = Arguments.createArray() - for(item in it) { + for (item in it) { threadsArray.pushMap(item) } notificationData.putArray("threads", threadsArray) @@ -105,7 +104,7 @@ class PushNotificationDataRunnable { dbHelper.saveToDatabase(db, notificationData, teamId, channelId, receivingThreads) } - Log.i("ReactNative", "Done processing push notification=$serverUrl for channel=$channelId") + Log.i("ReactNative", "Done processing push notification=$serverUrl for channel=$channelId and ack=$ackId") } } catch (e: Exception) { e.printStackTrace() diff --git a/android/app/src/main/java/com/mattermost/helpers/RandomId.kt b/android/app/src/main/java/com/mattermost/helpers/RandomId.kt index 7795d0a29bd..67489eff660 100644 --- a/android/app/src/main/java/com/mattermost/helpers/RandomId.kt +++ b/android/app/src/main/java/com/mattermost/helpers/RandomId.kt @@ -1,6 +1,6 @@ package com.mattermost.helpers -import kotlin.math.floor +import java.util.UUID class RandomId { companion object { @@ -9,14 +9,7 @@ class RandomId { private const val idLength = 16 fun generate(): String { - var id = "" - for (i in 1.rangeTo((idLength / 2))) { - val random = floor(Math.random() * alphabetLength * alphabetLength) - id += alphabet[floor(random / alphabetLength).toInt()] - id += alphabet[(random % alphabetLength).toInt()] - } - - return id + return UUID.randomUUID().toString() } } } diff --git a/android/app/src/main/java/com/mattermost/helpers/RealPathUtil.java b/android/app/src/main/java/com/mattermost/helpers/RealPathUtil.java deleted file mode 100644 index 1508b40c13a..00000000000 --- a/android/app/src/main/java/com/mattermost/helpers/RealPathUtil.java +++ /dev/null @@ -1,274 +0,0 @@ -package com.mattermost.helpers; - -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.provider.DocumentsContract; -import android.provider.MediaStore; -import android.provider.OpenableColumns; -import android.content.ContentResolver; -import android.os.Environment; -import android.webkit.MimeTypeMap; -import android.util.Log; -import android.text.TextUtils; - -import android.os.ParcelFileDescriptor; - -import java.io.*; -import java.nio.channels.FileChannel; - -// Class based on DocumentHelper https://gist.github.com/steveevers/a5af24c226f44bb8fdc3 - -public class RealPathUtil { - public static final String CACHE_DIR_NAME = "mmShare"; - public static String getRealPathFromURI(final Context context, final Uri uri) { - - // DocumentProvider - if (DocumentsContract.isDocumentUri(context, uri)) { - // ExternalStorageProvider - if (isExternalStorageDocument(uri)) { - final String docId = DocumentsContract.getDocumentId(uri); - final String[] split = docId.split(":"); - final String type = split[0]; - - if ("primary".equalsIgnoreCase(type)) { - return Environment.getExternalStorageDirectory() + "/" + split[1]; - } - } else if (isDownloadsDocument(uri)) { - // DownloadsProvider - - final String id = DocumentsContract.getDocumentId(uri); - if (!TextUtils.isEmpty(id)) { - if (id.startsWith("raw:")) { - return id.replaceFirst("raw:", ""); - } - try { - return getPathFromSavingTempFile(context, uri); - } catch (NumberFormatException e) { - Log.e("ReactNative", "DownloadsProvider unexpected uri " + uri); - return null; - } - } - } else if (isMediaDocument(uri)) { - // MediaProvider - - final String docId = DocumentsContract.getDocumentId(uri); - final String[] split = docId.split(":"); - final String type = split[0]; - - Uri contentUri = null; - if ("image".equals(type)) { - contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; - } else if ("video".equals(type)) { - contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; - } else if ("audio".equals(type)) { - contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; - } - - final String selection = "_id=?"; - final String[] selectionArgs = new String[] { - split[1] - }; - - String name = getDataColumn(context, contentUri, selection, selectionArgs); - if (!TextUtils.isEmpty(name)) { - return name; - } - - return getPathFromSavingTempFile(context, uri); - } - } - - if ("content".equalsIgnoreCase(uri.getScheme())) { - // MediaStore (and general) - - if (isGooglePhotosUri(uri)) { - return uri.getLastPathSegment(); - } - - // Try save to tmp file, and return tmp file path - return getPathFromSavingTempFile(context, uri); - } else if ("file".equalsIgnoreCase(uri.getScheme())) { - return uri.getPath(); - } - - return null; - } - - public static String getPathFromSavingTempFile(Context context, final Uri uri) { - File tmpFile; - String fileName = ""; - - if (uri == null || uri.isRelative()) { - return null; - } - - // Try and get the filename from the Uri - try { - Cursor returnCursor = - context.getContentResolver().query(uri, null, null, null, null); - int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); - returnCursor.moveToFirst(); - fileName = sanitizeFilename(returnCursor.getString(nameIndex)); - returnCursor.close(); - } catch (Exception e) { - // just continue to get the filename with the last segment of the path - } - - try { - if (TextUtils.isEmpty(fileName)) { - fileName = sanitizeFilename(uri.getLastPathSegment().trim()); - } - - - File cacheDir = new File(context.getCacheDir(), CACHE_DIR_NAME); - boolean cacheDirExists = cacheDir.exists(); - if (!cacheDirExists) { - cacheDirExists = cacheDir.mkdirs(); - } - - if (cacheDirExists) { - tmpFile = new File(cacheDir, fileName); - boolean fileCreated = tmpFile.createNewFile(); - - if (fileCreated) { - ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r"); - - try (FileInputStream inputSrc = new FileInputStream(pfd.getFileDescriptor())) { - FileChannel src = inputSrc.getChannel(); - try (FileOutputStream outputDst = new FileOutputStream(tmpFile)) { - FileChannel dst = outputDst.getChannel(); - dst.transferFrom(src, 0, src.size()); - src.close(); - dst.close(); - } - } - - pfd.close(); - } - return tmpFile.getAbsolutePath(); - } - } catch (IOException ex) { - ex.printStackTrace(); - } - - return null; - } - - public static String getDataColumn(Context context, Uri uri, String selection, - String[] selectionArgs) { - - Cursor cursor = null; - final String column = "_data"; - final String[] projection = { - column - }; - - try { - cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, - null); - if (cursor != null && cursor.moveToFirst()) { - final int index = cursor.getColumnIndexOrThrow(column); - return cursor.getString(index); - } - } finally { - if (cursor != null) - cursor.close(); - } - return null; - } - - - public static boolean isExternalStorageDocument(Uri uri) { - return "com.android.externalstorage.documents".equals(uri.getAuthority()); - } - - public static boolean isDownloadsDocument(Uri uri) { - return "com.android.providers.downloads.documents".equals(uri.getAuthority()); - } - - public static boolean isMediaDocument(Uri uri) { - return "com.android.providers.media.documents".equals(uri.getAuthority()); - } - - public static boolean isGooglePhotosUri(Uri uri) { - return "com.google.android.apps.photos.content".equals(uri.getAuthority()); - } - - public static String getExtension(String uri) { - String extension = ""; - if (uri == null) { - return extension; - } - - extension = MimeTypeMap.getFileExtensionFromUrl(uri); - if (!extension.equals("")) { - return extension; - } - - int dot = uri.lastIndexOf("."); - if (dot >= 0) { - return uri.substring(dot); - } else { - // No extension. - return ""; - } - } - - public static String getMimeType(File file) { - - String extension = getExtension(file.getName()); - - if (extension.length() > 0) - return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.substring(1)); - - return "application/octet-stream"; - } - - public static String getMimeType(String filePath) { - File file = new File(filePath); - return getMimeType(file); - } - - public static String getMimeTypeFromUri(final Context context, final Uri uri) { - try { - ContentResolver cR = context.getContentResolver(); - return cR.getType(uri); - } catch (Exception e) { - return "application/octet-stream"; - } - } - - public static void deleteTempFiles(final File dir) { - try { - if (dir.isDirectory()) { - deleteRecursive(dir); - } - } catch (Exception e) { - // do nothing - } - } - - private static void deleteRecursive(File fileOrDirectory) { - if (fileOrDirectory.isDirectory()) { - File[] files = fileOrDirectory.listFiles(); - if (files != null) { - for (File child : files) - deleteRecursive(child); - } - } - - if (!fileOrDirectory.delete()) { - Log.i("ReactNative", "Couldn't delete file " + fileOrDirectory.getName()); - } - } - - private static String sanitizeFilename(String filename) { - if (filename == null) { - return null; - } - - File f = new File(filename); - return f.getName(); - } -} diff --git a/android/app/src/main/java/com/mattermost/helpers/database_extension/General.kt b/android/app/src/main/java/com/mattermost/helpers/database_extension/General.kt index a3789cbabdf..985758b1c36 100644 --- a/android/app/src/main/java/com/mattermost/helpers/database_extension/General.kt +++ b/android/app/src/main/java/com/mattermost/helpers/database_extension/General.kt @@ -1,6 +1,7 @@ package com.mattermost.helpers.database_extension import android.content.Context +import android.database.sqlite.SQLiteDatabase import android.text.TextUtils import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.ReadableMap @@ -8,8 +9,7 @@ import com.mattermost.helpers.DatabaseHelper import com.mattermost.helpers.QueryArgs import com.mattermost.helpers.mapCursor import com.nozbe.watermelondb.WMDatabase -import java.util.* -import kotlin.Exception +import java.util.Arrays internal fun DatabaseHelper.saveToDatabase(db: WMDatabase, data: ReadableMap, teamId: String?, channelId: String?, receivingThreads: Boolean) { db.transaction { @@ -57,7 +57,7 @@ fun DatabaseHelper.getDatabaseForServer(context: Context?, serverUrl: String): W if (cursor.count == 1) { cursor.moveToFirst() val databasePath = String.format("file://%s", cursor.getString(0)) - return WMDatabase.getInstance(databasePath, context!!) + return WMDatabase.buildDatabase(databasePath, context!!, SQLiteDatabase.CREATE_IF_NECESSARY) } } } catch (e: Exception) { @@ -73,7 +73,7 @@ fun DatabaseHelper.getDeviceToken(): String? { defaultDatabase!!.rawQuery(query, arrayOf("deviceToken")).use { cursor -> if (cursor.count == 1) { cursor.moveToFirst() - return cursor.getString(0); + return cursor.getString(0) } } } catch (e: Exception) { diff --git a/android/app/src/main/java/com/mattermost/rnbeta/CustomPushNotification.java b/android/app/src/main/java/com/mattermost/rnbeta/CustomPushNotification.java deleted file mode 100644 index b0054eb23bb..00000000000 --- a/android/app/src/main/java/com/mattermost/rnbeta/CustomPushNotification.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.mattermost.rnbeta; - -import android.app.Notification; -import android.app.PendingIntent; -import android.content.Context; -import android.os.Bundle; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.core.app.NotificationCompat; - -import java.util.Objects; - -import com.facebook.react.bridge.ReadableMap; -import com.mattermost.helpers.CustomPushNotificationHelper; -import com.mattermost.helpers.DatabaseHelper; -import com.mattermost.helpers.Network; -import com.mattermost.helpers.NotificationHelper; -import com.mattermost.helpers.PushNotificationDataHelper; -import com.mattermost.helpers.ReadableMapUtils; -import com.mattermost.share.ShareModule; -import com.wix.reactnativenotifications.core.NotificationIntentAdapter; -import com.wix.reactnativenotifications.core.notification.PushNotification; -import com.wix.reactnativenotifications.core.AppLaunchHelper; -import com.wix.reactnativenotifications.core.AppLifecycleFacade; -import com.wix.reactnativenotifications.core.JsIOHelper; - -import static com.mattermost.helpers.database_extension.GeneralKt.*; -import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_EVENT_NAME; - - -public class CustomPushNotification extends PushNotification { - private final PushNotificationDataHelper dataHelper; - - public CustomPushNotification(Context context, Bundle bundle, AppLifecycleFacade appLifecycleFacade, AppLaunchHelper appLaunchHelper, JsIOHelper jsIoHelper) { - super(context, bundle, appLifecycleFacade, appLaunchHelper, jsIoHelper); - dataHelper = new PushNotificationDataHelper(context); - - try { - Objects.requireNonNull(DatabaseHelper.Companion.getInstance()).init(context); - Network.init(context); - NotificationHelper.cleanNotificationPreferencesIfNeeded(context); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Override - public void onReceived() { - final Bundle initialData = mNotificationProps.asBundle(); - final String type = initialData.getString("type"); - final String ackId = initialData.getString("ack_id"); - final String postId = initialData.getString("post_id"); - final String channelId = initialData.getString("channel_id"); - final String signature = initialData.getString("signature"); - final boolean isIdLoaded = initialData.getString("id_loaded") != null && initialData.getString("id_loaded").equals("true"); - int notificationId = NotificationHelper.getNotificationId(initialData); - - String serverUrl = addServerUrlToBundle(initialData); - - if (ackId != null && serverUrl != null) { - Bundle response = ReceiptDelivery.send(ackId, serverUrl, postId, type, isIdLoaded); - if (isIdLoaded && response != null) { - Bundle current = mNotificationProps.asBundle(); - if (!current.containsKey("server_url")) { - response.putString("server_url", serverUrl); - } - current.putAll(response); - mNotificationProps = createProps(current); - } - } - - if (!CustomPushNotificationHelper.verifySignature(mContext, signature, serverUrl, ackId)) { - Log.i("Mattermost Notifications Signature verification", "Notification skipped because we could not verify it."); - return; - } - - finishProcessingNotification(serverUrl, type, channelId, notificationId); - } - - @Override - public void onOpened() { - if (mNotificationProps != null) { - digestNotification(); - - Bundle data = mNotificationProps.asBundle(); - NotificationHelper.clearChannelOrThreadNotifications(mContext, data); - } - } - - private void finishProcessingNotification(final String serverUrl, @NonNull final String type, final String channelId, final int notificationId) { - final boolean isReactInit = mAppLifecycleFacade.isReactInitialized(); - - switch (type) { - case CustomPushNotificationHelper.PUSH_TYPE_MESSAGE: - case CustomPushNotificationHelper.PUSH_TYPE_SESSION: - ShareModule shareModule = ShareModule.getInstance(); - String currentActivityName = shareModule != null ? shareModule.getCurrentActivityName() : ""; - Log.i("ReactNative", currentActivityName); - if (!mAppLifecycleFacade.isAppVisible() || !currentActivityName.equals("MainActivity")) { - boolean createSummary = type.equals(CustomPushNotificationHelper.PUSH_TYPE_MESSAGE); - if (type.equals(CustomPushNotificationHelper.PUSH_TYPE_MESSAGE)) { - if (channelId != null) { - Bundle notificationBundle = mNotificationProps.asBundle(); - if (serverUrl != null) { - // We will only fetch the data related to the notification on the native side - // as updating the data directly to the db removes the wal & shm files needed - // by watermelonDB, if the DB is updated while WDB is running it causes WDB to - // detect the database as malformed, thus the app stop working and a restart is required. - // Data will be fetch from within the JS context instead. - Bundle notificationResult = dataHelper.fetchAndStoreDataForPushNotification(notificationBundle, isReactInit); - if (notificationResult != null) { - notificationBundle.putBundle("data", notificationResult); - mNotificationProps = createProps(notificationBundle); - } - } - createSummary = NotificationHelper.addNotificationToPreferences( - mContext, - notificationId, - notificationBundle - ); - } - } - - buildNotification(notificationId, createSummary); - } - break; - case CustomPushNotificationHelper.PUSH_TYPE_CLEAR: - NotificationHelper.clearChannelOrThreadNotifications(mContext, mNotificationProps.asBundle()); - break; - } - - if (isReactInit) { - notifyReceivedToJS(); - } - } - - private void buildNotification(Integer notificationId, boolean createSummary) { - final PendingIntent pendingIntent = NotificationIntentAdapter.createPendingNotificationIntent(mContext, mNotificationProps); - final Notification notification = buildNotification(pendingIntent); - if (createSummary) { - final Notification summary = getNotificationSummaryBuilder(pendingIntent).build(); - super.postNotification(summary, notificationId + 1); - } - super.postNotification(notification, notificationId); - } - - @Override - protected NotificationCompat.Builder getNotificationBuilder(PendingIntent intent) { - Bundle bundle = mNotificationProps.asBundle(); - return CustomPushNotificationHelper.createNotificationBuilder(mContext, intent, bundle, false); - } - - protected NotificationCompat.Builder getNotificationSummaryBuilder(PendingIntent intent) { - Bundle bundle = mNotificationProps.asBundle(); - return CustomPushNotificationHelper.createNotificationBuilder(mContext, intent, bundle, true); - } - - private void notifyReceivedToJS() { - mJsIOHelper.sendEventToJS(NOTIFICATION_RECEIVED_EVENT_NAME, mNotificationProps.asBundle(), mAppLifecycleFacade.getRunningReactContext()); - } - - private String addServerUrlToBundle(Bundle bundle) { - DatabaseHelper dbHelper = DatabaseHelper.Companion.getInstance(); - String serverId = bundle.getString("server_id"); - String serverUrl = null; - if (dbHelper != null) { - if (serverId == null) { - serverUrl = dbHelper.getOnlyServerUrl(); - } else { - serverUrl = getServerUrlForIdentifier(dbHelper, serverId); - } - - if (!TextUtils.isEmpty(serverUrl)) { - bundle.putString("server_url", serverUrl); - mNotificationProps = createProps(bundle); - } - } - - return serverUrl; - } -} diff --git a/android/app/src/main/java/com/mattermost/rnbeta/CustomPushNotification.kt b/android/app/src/main/java/com/mattermost/rnbeta/CustomPushNotification.kt new file mode 100644 index 00000000000..2c3e1f5db0d --- /dev/null +++ b/android/app/src/main/java/com/mattermost/rnbeta/CustomPushNotification.kt @@ -0,0 +1,177 @@ +package com.mattermost.rnbeta + +import android.app.PendingIntent +import android.content.Context +import android.os.Bundle +import android.util.Log +import androidx.core.app.NotificationCompat +import com.mattermost.helpers.CustomPushNotificationHelper +import com.mattermost.helpers.DatabaseHelper +import com.mattermost.helpers.Network +import com.mattermost.helpers.PushNotificationDataHelper +import com.mattermost.helpers.database_extension.getServerUrlForIdentifier +import com.mattermost.rnutils.helpers.NotificationHelper +import com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_EVENT_NAME +import com.wix.reactnativenotifications.core.AppLaunchHelper +import com.wix.reactnativenotifications.core.AppLifecycleFacade +import com.wix.reactnativenotifications.core.JsIOHelper +import com.wix.reactnativenotifications.core.NotificationIntentAdapter +import com.wix.reactnativenotifications.core.notification.PushNotification +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch + +class CustomPushNotification( + context: Context, + bundle: Bundle, + appLifecycleFacade: AppLifecycleFacade, + appLaunchHelper: AppLaunchHelper, + jsIoHelper: JsIOHelper +) : PushNotification(context, bundle, appLifecycleFacade, appLaunchHelper, jsIoHelper) { + private val dataHelper = PushNotificationDataHelper(context) + + init { + try { + DatabaseHelper.instance?.init(context) + Network.init(context) + NotificationHelper.cleanNotificationPreferencesIfNeeded(context) + } catch (e: Exception) { + e.printStackTrace() + } + } + + @OptIn(DelicateCoroutinesApi::class) + override fun onReceived() { + val initialData = mNotificationProps.asBundle() + val type = initialData.getString("type") + val ackId = initialData.getString("ack_id") + val postId = initialData.getString("post_id") + val channelId = initialData.getString("channel_id") + val signature = initialData.getString("signature") + val isIdLoaded = initialData.getString("id_loaded") == "true" + val notificationId = NotificationHelper.getNotificationId(initialData) + val serverUrl = addServerUrlToBundle(initialData) + + GlobalScope.launch { + try { + handlePushNotificationInCoroutine(serverUrl, type, channelId, ackId, isIdLoaded, notificationId, postId, signature) + } catch (e: Exception) { + e.printStackTrace() + } + } + } + + private suspend fun handlePushNotificationInCoroutine( + serverUrl: String?, + type: String?, + channelId: String?, + ackId: String?, + isIdLoaded: Boolean, + notificationId: Int, + postId: String?, + signature: String? + ) { + if (ackId != null && serverUrl != null) { + val response = ReceiptDelivery.send(ackId, serverUrl, postId, type, isIdLoaded) + if (isIdLoaded && response != null) { + val current = mNotificationProps.asBundle() + if (!current.containsKey("server_url")) { + response.putString("server_url", serverUrl) + } + current.putAll(response) + mNotificationProps = createProps(current) + } + } + + if (!CustomPushNotificationHelper.verifySignature(mContext, signature, serverUrl, ackId)) { + Log.i("Mattermost Notifications Signature verification", "Notification skipped because we could not verify it.") + return + } + + finishProcessingNotification(serverUrl, type, channelId, notificationId) + } + + override fun onOpened() { + mNotificationProps?.let { + digestNotification() + NotificationHelper.clearChannelOrThreadNotifications(mContext, it.asBundle()) + } + } + + private suspend fun finishProcessingNotification(serverUrl: String?, type: String?, channelId: String?, notificationId: Int) { + val isReactInit = mAppLifecycleFacade.isReactInitialized() + + when (type) { + CustomPushNotificationHelper.PUSH_TYPE_MESSAGE, CustomPushNotificationHelper.PUSH_TYPE_SESSION -> { + val currentActivityName = mAppLifecycleFacade.runningReactContext?.currentActivity?.componentName?.className ?: "" + Log.i("ReactNative", currentActivityName) + if (!mAppLifecycleFacade.isAppVisible() || currentActivityName != "MainActivity") { + var createSummary = type == CustomPushNotificationHelper.PUSH_TYPE_MESSAGE + if (type == CustomPushNotificationHelper.PUSH_TYPE_MESSAGE) { + channelId?.let { + val notificationBundle = mNotificationProps.asBundle() + serverUrl?.let { + val notificationResult = dataHelper.fetchAndStoreDataForPushNotification(notificationBundle, isReactInit) + notificationResult?.let { result -> + notificationBundle.putBundle("data", result) + mNotificationProps = createProps(notificationBundle) + } + } + createSummary = NotificationHelper.addNotificationToPreferences(mContext, notificationId, notificationBundle) + } + } + buildNotification(notificationId, createSummary) + } + } + CustomPushNotificationHelper.PUSH_TYPE_CLEAR -> NotificationHelper.clearChannelOrThreadNotifications(mContext, mNotificationProps.asBundle()) + } + + if (isReactInit) { + notifyReceivedToJS() + } + } + + private fun buildNotification(notificationId: Int, createSummary: Boolean) { + val pendingIntent = NotificationIntentAdapter.createPendingNotificationIntent(mContext, mNotificationProps) + val notification = buildNotification(pendingIntent) + if (createSummary) { + val summary = getNotificationSummaryBuilder(pendingIntent).build() + super.postNotification(summary, notificationId + 1) + } + super.postNotification(notification, notificationId) + } + + override fun getNotificationBuilder(intent: PendingIntent): NotificationCompat.Builder { + val bundle = mNotificationProps.asBundle() + return CustomPushNotificationHelper.createNotificationBuilder(mContext, intent, bundle, false) + } + + private fun getNotificationSummaryBuilder(intent: PendingIntent): NotificationCompat.Builder { + val bundle = mNotificationProps.asBundle() + return CustomPushNotificationHelper.createNotificationBuilder(mContext, intent, bundle, true) + } + + private fun notifyReceivedToJS() { + mJsIOHelper.sendEventToJS(NOTIFICATION_RECEIVED_EVENT_NAME, mNotificationProps.asBundle(), mAppLifecycleFacade.runningReactContext) + } + + private fun addServerUrlToBundle(bundle: Bundle): String? { + val dbHelper = DatabaseHelper.instance + val serverId = bundle.getString("server_id") + var serverUrl: String? = null + + dbHelper?.let { + serverUrl = if (serverId == null) { + it.onlyServerUrl + } else { + it.getServerUrlForIdentifier(serverId) + } + + if (!serverUrl.isNullOrEmpty()) { + bundle.putString("server_url", serverUrl) + mNotificationProps = createProps(bundle) + } + } + return serverUrl + } +} diff --git a/android/app/src/main/java/com/mattermost/rnbeta/MainActivity.kt b/android/app/src/main/java/com/mattermost/rnbeta/MainActivity.kt index 720bc566629..049f8854292 100644 --- a/android/app/src/main/java/com/mattermost/rnbeta/MainActivity.kt +++ b/android/app/src/main/java/com/mattermost/rnbeta/MainActivity.kt @@ -1,15 +1,15 @@ package com.mattermost.rnbeta +import android.content.res.Configuration import android.os.Bundle - import android.view.KeyEvent -import android.content.res.Configuration - import com.facebook.react.ReactActivityDelegate -import com.reactnativenavigation.NavigationActivity -import com.github.emilioicai.hwkeyboardevent.HWKeyboardEventModule import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint import com.facebook.react.defaults.DefaultReactActivityDelegate +import com.mattermost.hardware.keyboard.MattermostHardwareKeyboardImpl +import com.mattermost.rnutils.helpers.FoldableObserver +import com.reactnativenavigation.NavigationActivity +import expo.modules.ReactActivityDelegateWrapper class MainActivity : NavigationActivity() { private var HWKeyboardConnected = false @@ -26,7 +26,8 @@ class MainActivity : NavigationActivity() { * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] */ override fun createReactActivityDelegate(): ReactActivityDelegate = - DefaultReactActivityDelegate(this, mainComponentName, DefaultNewArchitectureEntryPoint.fabricEnabled) + ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, + DefaultReactActivityDelegate(this, mainComponentName, DefaultNewArchitectureEntryPoint.fabricEnabled)) override fun onCreate(savedInstanceState: Bundle?) { @@ -46,6 +47,11 @@ class MainActivity : NavigationActivity() { foldableObserver.onStop() } + override fun onDestroy() { + super.onDestroy() + foldableObserver.onDestroy() + } + override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { @@ -60,24 +66,11 @@ class MainActivity : NavigationActivity() { reactGateway.onWindowFocusChanged(hasFocus) } - /* - https://mattermost.atlassian.net/browse/MM-10601 - Required by react-native-hw-keyboard-event - (https://github.com/emilioicai/react-native-hw-keyboard-event) - */ override fun dispatchKeyEvent(event: KeyEvent): Boolean { if (HWKeyboardConnected) { - val keyCode = event.keyCode - val keyAction = event.action - if (keyAction == KeyEvent.ACTION_UP) { - if (keyCode == KeyEvent.KEYCODE_ENTER) { - val keyPressed = if (event.isShiftPressed) "shift-enter" else "enter" - HWKeyboardEventModule.getInstance().keyPressed(keyPressed) - return true - } else if (keyCode == KeyEvent.KEYCODE_K && event.isCtrlPressed) { - HWKeyboardEventModule.getInstance().keyPressed("find-channels") - return true - } + val ok = MattermostHardwareKeyboardImpl.dispatchKeyEvent(event) + if (ok) { + return true } } return super.dispatchKeyEvent(event) diff --git a/android/app/src/main/java/com/mattermost/rnbeta/MainApplication.kt b/android/app/src/main/java/com/mattermost/rnbeta/MainApplication.kt index b8767cba4f2..fb323ac4807 100644 --- a/android/app/src/main/java/com/mattermost/rnbeta/MainApplication.kt +++ b/android/app/src/main/java/com/mattermost/rnbeta/MainApplication.kt @@ -1,151 +1,67 @@ package com.mattermost.rnbeta + +import android.annotation.SuppressLint import android.content.Context +import android.content.res.Configuration import android.os.Bundle import android.util.Log - import com.facebook.react.PackageList import com.facebook.react.ReactHost +import com.facebook.react.ReactInstanceManager import com.facebook.react.ReactNativeHost import com.facebook.react.ReactPackage -import com.facebook.react.TurboReactPackage -import com.facebook.react.bridge.JSIModulePackage -import com.facebook.react.bridge.JSIModuleSpec -import com.facebook.react.bridge.JavaScriptContextHolder -import com.facebook.react.bridge.NativeModule -import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContext +import com.facebook.react.bridge.UiThreadUtil import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.react.flipper.ReactNativeFlipper -import com.facebook.react.module.model.ReactModuleInfo -import com.facebook.react.module.model.ReactModuleInfoProvider import com.facebook.react.modules.network.OkHttpClientProvider import com.facebook.soloader.SoLoader - -import com.mattermost.helpers.RealPathUtil import com.mattermost.networkclient.RCTOkHttpClientFactory -import com.mattermost.share.ShareModule - -import com.nozbe.watermelondb.jsi.WatermelonDBJSIPackage - +import com.mattermost.rnshare.helpers.RealPathUtil +import com.nozbe.watermelondb.jsi.JSIInstaller import com.reactnativenavigation.NavigationApplication - import com.wix.reactnativenotifications.RNNotificationsPackage import com.wix.reactnativenotifications.core.AppLaunchHelper import com.wix.reactnativenotifications.core.AppLifecycleFacade import com.wix.reactnativenotifications.core.JsIOHelper import com.wix.reactnativenotifications.core.notification.INotificationsApplication import com.wix.reactnativenotifications.core.notification.IPushNotification - +import expo.modules.ApplicationLifecycleDispatcher +import expo.modules.ReactNativeHostWrapper +import expo.modules.image.okhttp.ExpoImageOkHttpClientGlideModule import java.io.File class MainApplication : NavigationApplication(), INotificationsApplication { - var instance: MainApplication? = null - var sharedExtensionIsOpened = false + private var listenerAdded = false override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { - override fun getPackages(): List = - PackageList(this).packages.apply { - // Packages that cannot be autolinked yet can be added manually here, for example: - // add(MyReactNativePackage()) - add(RNNotificationsPackage(this@MainApplication)) - add(object : TurboReactPackage() { - override fun getModule( - name: String, - reactContext: ReactApplicationContext - ): NativeModule { - return when (name) { - "MattermostManaged" -> MattermostManagedModule.getInstance( - reactContext - ) - "MattermostShare" -> ShareModule.getInstance(reactContext) - "Notifications" -> NotificationsModule.getInstance( - instance, - reactContext - ) - "SplitView" -> SplitViewModule.getInstance( - reactContext - ) - else -> - throw IllegalArgumentException("Could not find module $name") - } - } - - override fun getReactModuleInfoProvider(): ReactModuleInfoProvider { - return ReactModuleInfoProvider { - val map: MutableMap = java.util.HashMap() - map["MattermostManaged"] = ReactModuleInfo( - "MattermostManaged", - "com.mattermost.rnbeta.MattermostManagedModule", - false, - false, - false, - false - ) - map["MattermostShare"] = ReactModuleInfo( - "MattermostShare", - "com.mattermost.share.ShareModule", - false, - false, - false, - false - ) - map["Notifications"] = ReactModuleInfo( - "Notifications", - "com.mattermost.rnbeta.NotificationsModule", - false, - false, - false, - false - ) - map["SplitView"] = ReactModuleInfo( - "SplitView", - "com.mattermost.rnbeta.SplitViewModule", - false, - false, - false, - false - ) - map - } - } - }) - } - - override fun getJSIModulePackage(): JSIModulePackage { - return JSIModulePackage { reactApplicationContext: ReactApplicationContext?, jsContext: JavaScriptContextHolder? -> - val modules = - mutableListOf>() - modules.addAll( - WatermelonDBJSIPackage().getJSIModules( - reactApplicationContext, - jsContext - ) - ) - modules - } - } + ReactNativeHostWrapper(this, + object : DefaultReactNativeHost(this) { + override fun getPackages(): List = + PackageList(this).packages.apply { + // Packages that cannot be autolinked yet can be added manually here, for example: + // add(MyReactNativePackage()) + add(RNNotificationsPackage(this@MainApplication)) + } - override fun getJSMainModuleName(): String = "index" + override fun getJSMainModuleName(): String = "index" - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + }) override val reactHost: ReactHost - get() = getDefaultReactHost(this.applicationContext, reactNativeHost) + get() = getDefaultReactHost(applicationContext, reactNativeHost) override fun onCreate() { super.onCreate() - instance = this - val context: Context = applicationContext // Delete any previous temp files created by the app - val tempFolder = File(context.cacheDir, RealPathUtil.CACHE_DIR_NAME) + val tempFolder = File(applicationContext.cacheDir, RealPathUtil.CACHE_DIR_NAME) RealPathUtil.deleteTempFiles(tempFolder) Log.i("ReactNative", "Cleaning temp cache " + tempFolder.absolutePath) @@ -157,13 +73,20 @@ class MainApplication : NavigationApplication(), INotificationsApplication { // with a cookie jar defined in APIClientModule and an interceptor to intercept all // requests that originate from React Native's OKHttpClient OkHttpClientProvider.setOkHttpClientFactory(RCTOkHttpClientFactory()) + ExpoImageOkHttpClientGlideModule.okHttpClient = RCTOkHttpClientFactory().createNewNetworkModuleClient() SoLoader.init(this, false) if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { // If you opted-in for the New Architecture, we load the native entry point for this app. - load() + load(bridgelessEnabled = false) } - ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) + ApplicationLifecycleDispatcher.onApplicationCreate(this) + registerJSIModules() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) } override fun getPushNotification( @@ -173,11 +96,45 @@ class MainApplication : NavigationApplication(), INotificationsApplication { defaultAppLaunchHelper: AppLaunchHelper? ): IPushNotification { return CustomPushNotification( - context, - bundle, - defaultFacade, - defaultAppLaunchHelper, + context!!, + bundle!!, + defaultFacade!!, + defaultAppLaunchHelper!!, JsIOHelper() ) } + + @SuppressLint("VisibleForTests") + private fun runOnJSQueueThread(action: () -> Unit) { + reactNativeHost.reactInstanceManager.currentReactContext?.runOnJSQueueThread { + action() + } ?: UiThreadUtil.runOnUiThread { + reactNativeHost.reactInstanceManager.currentReactContext?.runOnJSQueueThread { + action() + } + } + } + + @Suppress("DEPRECATION") + private fun registerJSIModules() { + val reactInstanceManager = reactNativeHost.reactInstanceManager + + if (!listenerAdded) { + listenerAdded = true + reactInstanceManager.addReactInstanceEventListener(object : ReactInstanceManager.ReactInstanceEventListener { + override fun onReactContextInitialized(context: ReactContext) { + runOnJSQueueThread { + registerWatermelonJSI(context) + } + } + }) + } + } + + private fun registerWatermelonJSI(context: ReactContext) { + val holder = context.javaScriptContextHolder?.get() + if (holder != null) { + JSIInstaller.install(context, holder) + } + } } diff --git a/android/app/src/main/java/com/mattermost/rnbeta/MattermostManagedModule.java b/android/app/src/main/java/com/mattermost/rnbeta/MattermostManagedModule.java deleted file mode 100644 index 765fc2fe887..00000000000 --- a/android/app/src/main/java/com/mattermost/rnbeta/MattermostManagedModule.java +++ /dev/null @@ -1,263 +0,0 @@ -package com.mattermost.rnbeta; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.ParcelFileDescriptor; -import android.text.TextUtils; -import android.webkit.MimeTypeMap; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.FileProvider; - -import com.facebook.react.bridge.ActivityEventListener; -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.BaseActivityEventListener; -import com.facebook.react.bridge.GuardedResultAsyncTask; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.modules.core.DeviceEventManagerModule; - -import com.mattermost.helpers.Credentials; -import com.reactlibrary.createthumbnail.CreateThumbnailModule; -import com.mattermost.helpers.RealPathUtil; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.lang.ref.WeakReference; -import java.net.URL; -import java.nio.channels.FileChannel; -import java.util.Objects; - -public class MattermostManagedModule extends ReactContextBaseJavaModule { - private static final String SAVE_EVENT = "MattermostManagedSaveFile"; - private static final Integer SAVE_REQUEST = 38641; - private static MattermostManagedModule instance; - private ReactApplicationContext reactContext; - - private Promise mPickerPromise; - private String fileContent; - - private MattermostManagedModule(ReactApplicationContext reactContext) { - super(reactContext); - this.reactContext = reactContext; - // Let the document provider know you're done by closing the stream. - ActivityEventListener mActivityEventListener = new BaseActivityEventListener() { - @Override - public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) { - if (requestCode == SAVE_REQUEST) { - if (mPickerPromise != null) { - if (resultCode == Activity.RESULT_CANCELED) { - mPickerPromise.reject(SAVE_EVENT, "Save operation cancelled"); - } else if (resultCode == Activity.RESULT_OK) { - Uri uri = intent.getData(); - if (uri == null) { - mPickerPromise.reject(SAVE_EVENT, "No data found"); - } else { - try { - new SaveDataTask(reactContext, fileContent, uri).execute(); - mPickerPromise.resolve(uri.toString()); - } catch (Exception e) { - mPickerPromise.reject(SAVE_EVENT, e.getMessage()); - } - } - } - - mPickerPromise = null; - } else if (resultCode == Activity.RESULT_OK) { - try { - Uri uri = intent.getData(); - if (uri != null) - new SaveDataTask(reactContext, fileContent, uri).execute(); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - }; - reactContext.addActivityEventListener(mActivityEventListener); - } - - public static MattermostManagedModule getInstance(ReactApplicationContext reactContext) { - if (instance == null) { - instance = new MattermostManagedModule(reactContext); - } else { - instance.reactContext = reactContext; - } - - return instance; - } - - public static MattermostManagedModule getInstance() { - return instance; - } - - public void sendEvent(String eventName, - @Nullable WritableMap params) { - this.reactContext - .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) - .emit(eventName, params); - } - - @Override - @NonNull - public String getName() { - return "MattermostManaged"; - } - - @ReactMethod - public void getFilePath(String filePath, Promise promise) { - Activity currentActivity = getCurrentActivity(); - WritableMap map = Arguments.createMap(); - - if (currentActivity != null) { - Uri uri = Uri.parse(filePath); - String path = RealPathUtil.getRealPathFromURI(currentActivity, uri); - if (path != null) { - String text = "file://" + path; - map.putString("filePath", text); - } - } - - promise.resolve(map); - } - - @ReactMethod - public void saveFile(String path, final Promise promise) { - Uri contentUri; - String filename = ""; - if(path.startsWith("content://")) { - contentUri = Uri.parse(path); - } else { - File newFile = new File(path); - filename = newFile.getName(); - Activity currentActivity = getCurrentActivity(); - if(currentActivity == null) { - promise.reject(SAVE_EVENT, "Activity doesn't exist"); - return; - } - try { - final String packageName = currentActivity.getPackageName(); - final String authority = packageName + ".provider"; - contentUri = FileProvider.getUriForFile(currentActivity, authority, newFile); - } - catch(IllegalArgumentException e) { - promise.reject(SAVE_EVENT, e.getMessage()); - return; - } - } - - if(contentUri == null) { - promise.reject(SAVE_EVENT, "Invalid file"); - return; - } - - String extension = MimeTypeMap.getFileExtensionFromUrl(path).toLowerCase(); - String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); - if (mimeType == null) { - mimeType = RealPathUtil.getMimeType(path); - } - - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_CREATE_DOCUMENT); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.addCategory(Intent.CATEGORY_OPENABLE); - intent.setType(mimeType); - intent.putExtra(Intent.EXTRA_TITLE, filename); - - PackageManager pm = Objects.requireNonNull(getCurrentActivity()).getPackageManager(); - if (intent.resolveActivity(pm) != null) { - try { - getCurrentActivity().startActivityForResult(intent, SAVE_REQUEST); - mPickerPromise = promise; - fileContent = path; - } - catch(Exception e) { - promise.reject(SAVE_EVENT, e.getMessage()); - } - } else { - try { - if(mimeType == null) { - throw new Exception("It wasn't possible to detect the type of the file"); - } - throw new Exception("No app associated with this mime type"); - } - catch(Exception e) { - promise.reject(SAVE_EVENT, e.getMessage()); - } - } - } - - @ReactMethod - public void createThumbnail(ReadableMap options, Promise promise) { - try { - WritableMap optionsMap = Arguments.createMap(); - optionsMap.merge(options); - String url = options.hasKey("url") ? options.getString("url") : ""; - URL videoUrl = new URL(url); - String serverUrl = videoUrl.getProtocol() + "://" + videoUrl.getHost() + ":" + videoUrl.getPort(); - String token = Credentials.getCredentialsForServerSync(this.reactContext, serverUrl); - if (!TextUtils.isEmpty(token)) { - WritableMap headers = Arguments.createMap(); - if (optionsMap.hasKey("headers")) { - headers.merge(Objects.requireNonNull(optionsMap.getMap("headers"))); - } - headers.putString("Authorization", "Bearer " + token); - optionsMap.putMap("headers", headers); - } - CreateThumbnailModule thumb = new CreateThumbnailModule(this.reactContext); - thumb.create(optionsMap.copy(), promise); - } catch (Exception e) { - promise.reject("CreateThumbnail_ERROR", e); - } - } - - private static class SaveDataTask extends GuardedResultAsyncTask { - private final WeakReference weakContext; - private final String fromFile; - private final Uri toFile; - - protected SaveDataTask(ReactApplicationContext reactContext, String path, Uri destination) { - super(reactContext.getExceptionHandler()); - weakContext = new WeakReference<>(reactContext.getApplicationContext()); - fromFile = path; - toFile = destination; - } - - @Override - protected Object doInBackgroundGuarded() { - try { - ParcelFileDescriptor pfd = weakContext.get().getContentResolver().openFileDescriptor(toFile, "w"); - File input = new File(this.fromFile); - try (FileInputStream fileInputStream = new FileInputStream(input)) { - try (FileOutputStream fileOutputStream = new FileOutputStream(pfd.getFileDescriptor())) { - FileChannel source = fileInputStream.getChannel(); - FileChannel dest = fileOutputStream.getChannel(); - dest.transferFrom(source, 0, source.size()); - source.close(); - dest.close(); - } - } - pfd.close(); - } catch (Exception e) { - e.printStackTrace(); - } - - return null; - } - - @Override - protected void onPostExecuteGuarded(Object o) { - - } - } -} diff --git a/android/app/src/main/java/com/mattermost/rnbeta/NotificationDismissService.java b/android/app/src/main/java/com/mattermost/rnbeta/NotificationDismissService.java index 3299145ee04..6f72fb5ffc8 100644 --- a/android/app/src/main/java/com/mattermost/rnbeta/NotificationDismissService.java +++ b/android/app/src/main/java/com/mattermost/rnbeta/NotificationDismissService.java @@ -6,7 +6,7 @@ import android.os.Bundle; import android.util.Log; -import com.mattermost.helpers.NotificationHelper; +import com.mattermost.rnutils.helpers.NotificationHelper; import com.wix.reactnativenotifications.core.NotificationIntentAdapter; public class NotificationDismissService extends IntentService { @@ -19,7 +19,7 @@ protected void onHandleIntent(Intent intent) { final Context context = getApplicationContext(); final Bundle bundle = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent); - NotificationHelper.dismissNotification(context, bundle); + NotificationHelper.INSTANCE.dismissNotification(context, bundle); Log.i("ReactNative", "Dismiss notification"); } } diff --git a/android/app/src/main/java/com/mattermost/rnbeta/NotificationsModule.java b/android/app/src/main/java/com/mattermost/rnbeta/NotificationsModule.java deleted file mode 100644 index 6de0faccd30..00000000000 --- a/android/app/src/main/java/com/mattermost/rnbeta/NotificationsModule.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.mattermost.rnbeta; - -import android.app.Notification; -import android.content.Context; -import android.os.Bundle; -import android.service.notification.StatusBarNotification; - -import androidx.annotation.NonNull; - -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.WritableArray; -import com.facebook.react.bridge.WritableMap; -import com.mattermost.helpers.NotificationHelper; - -import java.util.Set; - -public class NotificationsModule extends ReactContextBaseJavaModule { - private static NotificationsModule instance; - private final MainApplication mApplication; - - private NotificationsModule(MainApplication application, ReactApplicationContext reactContext) { - super(reactContext); - mApplication = application; - } - - public static NotificationsModule getInstance(MainApplication application, ReactApplicationContext reactContext) { - if (instance == null) { - instance = new NotificationsModule(application, reactContext); - } - - return instance; - } - - @NonNull - @Override - public String getName() { - return "Notifications"; - } - - @ReactMethod - public void getDeliveredNotifications(final Promise promise) { - Context context = mApplication.getApplicationContext(); - StatusBarNotification[] notifications = NotificationHelper.getDeliveredNotifications(context); - WritableArray result = Arguments.createArray(); - for (StatusBarNotification sbn:notifications) { - WritableMap map = Arguments.createMap(); - Notification n = sbn.getNotification(); - Bundle bundle = n.extras; - Set keys = bundle.keySet(); - for (String key: keys) { - map.putString(key, bundle.getString(key)); - } - result.pushMap(map); - } - promise.resolve(result); - } - - @ReactMethod - public void removeChannelNotifications(String serverUrl, String channelId) { - Context context = mApplication.getApplicationContext(); - NotificationHelper.removeChannelNotifications(context, serverUrl, channelId); - } - - @ReactMethod - public void removeThreadNotifications(String serverUrl, String threadId) { - Context context = mApplication.getApplicationContext(); - NotificationHelper.removeThreadNotifications(context, serverUrl, threadId); - } - - @ReactMethod - public void removeServerNotifications(String serverUrl) { - Context context = mApplication.getApplicationContext(); - NotificationHelper.removeServerNotifications(context, serverUrl); - } -} diff --git a/android/app/src/main/java/com/mattermost/rnbeta/SplitViewModule.kt b/android/app/src/main/java/com/mattermost/rnbeta/SplitViewModule.kt deleted file mode 100644 index 89a99fdeae5..00000000000 --- a/android/app/src/main/java/com/mattermost/rnbeta/SplitViewModule.kt +++ /dev/null @@ -1,74 +0,0 @@ -package com.mattermost.rnbeta - -import com.facebook.react.bridge.* -import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter -import com.learnium.RNDeviceInfo.resolver.DeviceTypeResolver - -class SplitViewModule(private var reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { - private var listenerCount = 0 - - companion object { - private var instance: SplitViewModule? = null - - fun getInstance(reactContext: ReactApplicationContext): SplitViewModule { - if (instance == null) { - instance = SplitViewModule(reactContext) - } else { - instance!!.reactContext = reactContext - } - - return instance!! - } - - fun getInstance(): SplitViewModule? { - return instance - } - } - - - override fun getName() = "SplitView" - - private fun sendEvent(params: WritableMap?) { - reactContext - .getJSModule(RCTDeviceEventEmitter::class.java) - .emit("SplitViewChanged", params) - } - - private fun getSplitViewResults(folded: Boolean) : WritableMap? { - if (currentActivity != null) { - val deviceResolver = DeviceTypeResolver(this.reactContext) - val map = Arguments.createMap() - var isSplitView = folded; - if (currentActivity?.isInMultiWindowMode == true) { - isSplitView = FoldableObserver.getInstance()?.isCompactView() == true - } - map.putBoolean("isSplitView", isSplitView) - map.putBoolean("isTablet", deviceResolver.isTablet) - return map - } - - return null - } - - fun setDeviceFolded() { - val map = getSplitViewResults(FoldableObserver.getInstance()?.isDeviceFolded == true) - if (listenerCount > 0) { - sendEvent(map) - } - } - - @ReactMethod(isBlockingSynchronousMethod = true) - fun isRunningInSplitView(): WritableMap? { - return getSplitViewResults(FoldableObserver.getInstance()?.isDeviceFolded == true) - } - - @ReactMethod - fun addListener(eventName: String) { - listenerCount += 1 - } - - @ReactMethod - fun removeListeners(count: Int) { - listenerCount -= count - } -} diff --git a/android/app/src/main/java/com/mattermost/share/ShareActivity.java b/android/app/src/main/java/com/mattermost/share/ShareActivity.java deleted file mode 100644 index 7f9d19cae80..00000000000 --- a/android/app/src/main/java/com/mattermost/share/ShareActivity.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mattermost.share; - -import android.os.Bundle; - -import com.facebook.react.ReactActivity; -import com.mattermost.rnbeta.MainApplication; - -public class ShareActivity extends ReactActivity { - @Override - protected String getMainComponentName() { - return "MattermostShare"; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - MainApplication app = (MainApplication) this.getApplication(); - app.setSharedExtensionIsOpened(true); - } -} diff --git a/android/app/src/main/java/com/mattermost/share/ShareModule.java b/android/app/src/main/java/com/mattermost/share/ShareModule.java deleted file mode 100644 index e97f3663962..00000000000 --- a/android/app/src/main/java/com/mattermost/share/ShareModule.java +++ /dev/null @@ -1,259 +0,0 @@ -package com.mattermost.share; - -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.WritableArray; -import com.facebook.react.bridge.Arguments; -import com.mattermost.helpers.Credentials; -import com.mattermost.rnbeta.MainApplication; -import com.mattermost.helpers.RealPathUtil; - -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.io.File; -import java.util.ArrayList; - -import org.json.JSONArray; -import org.json.JSONObject; -import org.json.JSONException; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import okhttp3.MediaType; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.MultipartBody; -import okhttp3.RequestBody; -import okhttp3.Response; - -public class ShareModule extends ReactContextBaseJavaModule { - private final OkHttpClient client = new OkHttpClient(); - public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); - private static ShareModule instance; - private final MainApplication mApplication; - private ReactApplicationContext mReactContext; - private File tempFolder; - - private ShareModule(ReactApplicationContext reactContext) { - super(reactContext); - mReactContext = reactContext; - mApplication = (MainApplication)reactContext.getApplicationContext(); - } - - public static ShareModule getInstance(ReactApplicationContext reactContext) { - if (instance == null) { - instance = new ShareModule(reactContext); - } else { - instance.mReactContext = reactContext; - } - - return instance; - } - - public static ShareModule getInstance() { - return instance; - } - - @NonNull - @Override - public String getName() { - return "MattermostShare"; - } - - @ReactMethod(isBlockingSynchronousMethod = true) - public String getCurrentActivityName() { - Activity currentActivity = getCurrentActivity(); - if (currentActivity != null) { - String activityName = currentActivity.getComponentName().getClassName(); - String[] components = activityName.split("\\."); - return components[components.length - 1]; - } - - return ""; - } - - @ReactMethod - public void clear() { - Activity currentActivity = getCurrentActivity(); - if (currentActivity != null && this.getCurrentActivityName().equals("ShareActivity")) { - Intent intent = currentActivity.getIntent(); - intent.setAction(""); - intent.removeExtra(Intent.EXTRA_TEXT); - intent.removeExtra(Intent.EXTRA_STREAM); - } - } - - @Nullable - @Override - public Map getConstants() { - HashMap constants = new HashMap<>(1); - constants.put("cacheDirName", RealPathUtil.CACHE_DIR_NAME); - constants.put("isOpened", mApplication.getSharedExtensionIsOpened()); - return constants; - } - - @ReactMethod - public void close(ReadableMap data) { - this.clear(); - Activity currentActivity = getCurrentActivity(); - if (currentActivity == null || !this.getCurrentActivityName().equals("ShareActivity")) { - return; - } - - currentActivity.finishAndRemoveTask(); - if (data != null && data.hasKey("serverUrl")) { - ReadableArray files = data.getArray("files"); - String serverUrl = data.getString("serverUrl"); - final String token = Credentials.getCredentialsForServerSync(mReactContext, serverUrl); - JSONObject postData = buildPostObject(data); - - if (files != null && files.size() > 0) { - uploadFiles(serverUrl, token, files, postData); - } else { - try { - post(serverUrl, token, postData); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - mApplication.setSharedExtensionIsOpened(false); - RealPathUtil.deleteTempFiles(this.tempFolder); - } - - @ReactMethod - public void getSharedData(Promise promise) { - promise.resolve(processIntent()); - } - - public WritableArray processIntent() { - String type, action, extra; - WritableArray items = Arguments.createArray(); - Activity currentActivity = getCurrentActivity(); - - if (currentActivity != null) { - this.tempFolder = new File(currentActivity.getCacheDir(), RealPathUtil.CACHE_DIR_NAME); - Intent intent = currentActivity.getIntent(); - action = intent.getAction(); - type = intent.getType(); - extra = intent.getStringExtra(Intent.EXTRA_TEXT); - - if (Intent.ACTION_SEND.equals(action) && "text/plain".equals(type) && extra != null) { - items.pushMap(ShareUtils.getTextItem(extra)); - } else if (Intent.ACTION_SEND.equals(action)) { - if (extra != null) { - items.pushMap(ShareUtils.getTextItem(extra)); - } - Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM); - if (uri != null) { - ReadableMap fileInfo = ShareUtils.getFileItem(currentActivity, uri); - if (fileInfo != null) { - items.pushMap(fileInfo); - } - } - } else if (Intent.ACTION_SEND_MULTIPLE.equals(action)) { - if (extra != null) { - items.pushMap(ShareUtils.getTextItem(extra)); - } - - ArrayList uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); - for (Uri uri : uris) { - ReadableMap fileInfo = ShareUtils.getFileItem(currentActivity, uri); - if (fileInfo != null) { - items.pushMap(fileInfo); - } - } - } - } - - return items; - } - - private JSONObject buildPostObject(ReadableMap data) { - JSONObject json = new JSONObject(); - try { - json.put("user_id", data.getString("userId")); - if (data.hasKey("channelId")) { - json.put("channel_id", data.getString("channelId")); - } - if (data.hasKey("message")) { - json.put("message", data.getString("message")); - } - } catch (JSONException e) { - e.printStackTrace(); - } - return json; - } - - private void post(String serverUrl, String token, JSONObject postData) throws IOException { - RequestBody body = RequestBody.create(postData.toString(), JSON); - Request request = new Request.Builder() - .header("Authorization", "BEARER " + token) - .url(serverUrl + "/api/v4/posts") - .post(body) - .build(); - client.newCall(request).execute(); - } - - private void uploadFiles(String serverUrl, String token, ReadableArray files, JSONObject postData) { - try { - MultipartBody.Builder builder = new MultipartBody.Builder() - .setType(MultipartBody.FORM); - - for(int i = 0 ; i < files.size() ; i++) { - ReadableMap file = files.getMap(i); - String mime = file.getString("type"); - String fullPath = file.getString("value"); - if (fullPath != null) { - String filePath = fullPath.replaceFirst("file://", ""); - File fileInfo = new File(filePath); - if (fileInfo.exists() && mime != null) { - final MediaType MEDIA_TYPE = MediaType.parse(mime); - builder.addFormDataPart("files", file.getString("filename"), RequestBody.create(fileInfo, MEDIA_TYPE)); - } - } - } - - builder.addFormDataPart("channel_id", postData.getString("channel_id")); - RequestBody body = builder.build(); - Request request = new Request.Builder() - .header("Authorization", "BEARER " + token) - .url(serverUrl + "/api/v4/files") - .post(body) - .build(); - - try (Response response = client.newCall(request).execute()) { - if (response.isSuccessful()) { - String responseData = Objects.requireNonNull(response.body()).string(); - JSONObject responseJson = new JSONObject(responseData); - JSONArray fileInfoArray = responseJson.getJSONArray("file_infos"); - JSONArray file_ids = new JSONArray(); - for(int i = 0 ; i < fileInfoArray.length() ; i++) { - JSONObject fileInfo = fileInfoArray.getJSONObject(i); - file_ids.put(fileInfo.getString("id")); - } - postData.put("file_ids", file_ids); - post(serverUrl, token, postData); - } - } catch (IOException e) { - e.printStackTrace(); - } - - } catch (JSONException e) { - e.printStackTrace(); - } - } -} diff --git a/android/app/src/main/java/com/mattermost/share/ShareUtils.java b/android/app/src/main/java/com/mattermost/share/ShareUtils.java deleted file mode 100644 index 143326edf27..00000000000 --- a/android/app/src/main/java/com/mattermost/share/ShareUtils.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.mattermost.share; - -import android.app.Activity; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.media.MediaMetadataRetriever; -import android.net.Uri; -import android.webkit.URLUtil; - -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.WritableMap; -import com.mattermost.helpers.RealPathUtil; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.UUID; - -public class ShareUtils { - public static ReadableMap getTextItem(String text) { - WritableMap map = Arguments.createMap(); - map.putString("value", text); - map.putString("type", ""); - map.putBoolean("isString", true); - return map; - } - - public static ReadableMap getFileItem(Activity activity, Uri uri) { - WritableMap map = Arguments.createMap(); - String filePath = RealPathUtil.getRealPathFromURI(activity, uri); - if (filePath == null) { - return null; - } - - File file = new File(filePath); - String type = RealPathUtil.getMimeTypeFromUri(activity, uri); - if (type != null) { - if (type.startsWith("image/")) { - BitmapFactory.Options bitMapOption = ShareUtils.getImageDimensions(filePath); - map.putInt("height", bitMapOption.outHeight); - map.putInt("width", bitMapOption.outWidth); - - } else if (type.startsWith("video/")) { - File cacheDir = new File(activity.getCacheDir(), RealPathUtil.CACHE_DIR_NAME); - addVideoThumbnailToMap(cacheDir, activity.getApplicationContext(), map, "file://" + filePath); - } - } else { - type = "application/octet-stream"; - } - - map.putString("value", "file://" + filePath); - map.putDouble("size", (double) file.length()); - map.putString("filename", file.getName()); - map.putString("type", type); - map.putString("extension", RealPathUtil.getExtension(filePath).replaceFirst(".", "")); - map.putBoolean("isString", false); - return map; - } - - public static BitmapFactory.Options getImageDimensions(String filePath) { - BitmapFactory.Options bitMapOption = new BitmapFactory.Options(); - bitMapOption.inJustDecodeBounds=true; - BitmapFactory.decodeFile(filePath, bitMapOption); - return bitMapOption; - } - - private static void addVideoThumbnailToMap(File cacheDir, Context context, WritableMap map, String filePath) { - String fileName = ("thumb-" + UUID.randomUUID().toString()) + ".png"; - OutputStream fOut = null; - - try { - File file = new File(cacheDir, fileName); - Bitmap image = getBitmapAtTime(context, filePath, 1); - if (file.createNewFile()) { - fOut = new FileOutputStream(file); - image.compress(Bitmap.CompressFormat.PNG, 100, fOut); - fOut.flush(); - fOut.close(); - - map.putString("videoThumb", "file://" + file.getAbsolutePath()); - map.putInt("width", image.getWidth()); - map.putInt("height", image.getHeight()); - } - } catch (Exception ignored) { - } - } - - private static Bitmap getBitmapAtTime(Context context, String filePath, int time) { - try { - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - if (URLUtil.isFileUrl(filePath)) { - String decodedPath; - try { - decodedPath = URLDecoder.decode(filePath, "UTF-8"); - } catch (UnsupportedEncodingException e) { - decodedPath = filePath; - } - - retriever.setDataSource(decodedPath.replace("file://", "")); - } else if (filePath.contains("content://")) { - retriever.setDataSource(context, Uri.parse(filePath)); - } - - Bitmap image = retriever.getFrameAtTime(time * 1000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC); - retriever.release(); - return image; - } catch (Exception e) { - throw new IllegalStateException("File doesn't exist or not supported"); - } - } -} diff --git a/android/app/src/main/res/drawable/rn_edit_text_material.xml b/android/app/src/main/res/drawable/rn_edit_text_material.xml index ab58c0f44be..060f7ee17df 100644 --- a/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ b/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -14,7 +14,8 @@ android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material" android:insetRight="@dimen/abc_edit_text_inset_horizontal_material" android:insetTop="@dimen/abc_edit_text_inset_top_material" - android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"> + android:insetBottom="@dimen/abc_edit_text_inset_bottom_material" + > + diff --git a/android/app/src/unsigned/java/com/mattermost/flipper/ReactNativeFlipper.java b/android/app/src/unsigned/java/com/mattermost/flipper/ReactNativeFlipper.java deleted file mode 100644 index ae3179b7cfb..00000000000 --- a/android/app/src/unsigned/java/com/mattermost/flipper/ReactNativeFlipper.java +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - *

This source code is licensed under the MIT license found in the LICENSE file in the root - * directory of this source tree. - */ -package com.mattermost.flipper; - -import android.content.Context; -import com.facebook.react.ReactInstanceManager; -/** - * Class responsible of loading Flipper inside your React Native application. This is the release - * flavor of it so it's empty as we don't want to load Flipper. - */ -public class ReactNativeFlipper { - public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { - // Do nothing as we don't want to initialize Flipper on Release. - } -} diff --git a/android/build.gradle b/android/build.gradle index f2b0a8b8f07..e1b16d9d0d1 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,11 +5,11 @@ buildscript { compileSdkVersion = 34 targetSdkVersion = 34 supportLibVersion = "33.0.0" - kotlinVersion = "1.8.21" + kotlinVersion = "1.9.22" kotlin_version = kotlinVersion RNNKotlinVersion = kotlinVersion - firebaseVersion = "23.3.1" - ndkVersion = "25.1.8937393" + firebaseVersion = "24.0.0" + ndkVersion = "26.1.10909125" } repositories { mavenCentral() @@ -20,7 +20,7 @@ buildscript { classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") classpath('com.google.gms:google-services:4.4.0') - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -39,24 +39,6 @@ allprojects { } } -subprojects { - afterEvaluate { subproject -> - if(subproject['name'] == 'react-native-create-thumbnail'){ - def myAttribute = Attribute.of("com.android.build.api.attributes.BuildTypeAttr", String) - dependencies.attributesSchema { - attribute(myAttribute) - } - configurations { - implementation { - attributes { - attribute(myAttribute, "release") - } - } - } - } - } -} - apply plugin: "com.facebook.react.rootproject" dependencyLocking { diff --git a/android/buildscript-gradle.lockfile b/android/buildscript-gradle.lockfile index b6bb354a906..80805c20cae 100644 --- a/android/buildscript-gradle.lockfile +++ b/android/buildscript-gradle.lockfile @@ -1,55 +1,55 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -androidx.databinding:databinding-common:8.1.1=classpath -androidx.databinding:databinding-compiler-common:8.1.1=classpath -com.android.databinding:baseLibrary:8.1.1=classpath -com.android.tools.analytics-library:crash:31.1.1=classpath -com.android.tools.analytics-library:protos:31.1.1=classpath -com.android.tools.analytics-library:shared:31.1.1=classpath -com.android.tools.analytics-library:tracker:31.1.1=classpath +androidx.databinding:databinding-common:8.2.1=classpath +androidx.databinding:databinding-compiler-common:8.2.1=classpath +com.android.databinding:baseLibrary:8.2.1=classpath +com.android.tools.analytics-library:crash:31.2.1=classpath +com.android.tools.analytics-library:protos:31.2.1=classpath +com.android.tools.analytics-library:shared:31.2.1=classpath +com.android.tools.analytics-library:tracker:31.2.1=classpath com.android.tools.build.jetifier:jetifier-core:1.0.0-beta10=classpath com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta10=classpath -com.android.tools.build:aapt2-proto:8.1.1-10154469=classpath -com.android.tools.build:aaptcompiler:8.1.1=classpath -com.android.tools.build:apksig:8.1.1=classpath -com.android.tools.build:apkzlib:8.1.1=classpath -com.android.tools.build:builder-model:8.1.1=classpath -com.android.tools.build:builder-test-api:8.1.1=classpath -com.android.tools.build:builder:8.1.1=classpath -com.android.tools.build:bundletool:1.14.0=classpath -com.android.tools.build:gradle-api:8.1.1=classpath -com.android.tools.build:gradle-settings-api:8.1.1=classpath -com.android.tools.build:gradle:8.1.1=classpath -com.android.tools.build:manifest-merger:31.1.1=classpath +com.android.tools.build:aapt2-proto:8.2.1-10154469=classpath +com.android.tools.build:aaptcompiler:8.2.1=classpath +com.android.tools.build:apksig:8.2.1=classpath +com.android.tools.build:apkzlib:8.2.1=classpath +com.android.tools.build:builder-model:8.2.1=classpath +com.android.tools.build:builder-test-api:8.2.1=classpath +com.android.tools.build:builder:8.2.1=classpath +com.android.tools.build:bundletool:1.15.2=classpath +com.android.tools.build:gradle-api:8.2.1=classpath +com.android.tools.build:gradle-settings-api:8.2.1=classpath +com.android.tools.build:gradle:8.2.1=classpath +com.android.tools.build:manifest-merger:31.2.1=classpath com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api=classpath -com.android.tools.ddms:ddmlib:31.1.1=classpath -com.android.tools.layoutlib:layoutlib-api:31.1.1=classpath -com.android.tools.lint:lint-model:31.1.1=classpath -com.android.tools.lint:lint-typedef-remover:31.1.1=classpath -com.android.tools.utp:android-device-provider-ddmlib-proto:31.1.1=classpath -com.android.tools.utp:android-device-provider-gradle-proto:31.1.1=classpath -com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.1.1=classpath -com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.1.1=classpath -com.android.tools.utp:android-test-plugin-host-coverage-proto:31.1.1=classpath -com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.1.1=classpath -com.android.tools.utp:android-test-plugin-host-logcat-proto:31.1.1=classpath -com.android.tools.utp:android-test-plugin-host-retention-proto:31.1.1=classpath -com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.1.1=classpath -com.android.tools:annotations:31.1.1=classpath -com.android.tools:common:31.1.1=classpath -com.android.tools:dvlib:31.1.1=classpath -com.android.tools:repository:31.1.1=classpath -com.android.tools:sdk-common:31.1.1=classpath -com.android.tools:sdklib:31.1.1=classpath -com.android:signflinger:8.1.1=classpath -com.android:zipflinger:8.1.1=classpath +com.android.tools.ddms:ddmlib:31.2.1=classpath +com.android.tools.layoutlib:layoutlib-api:31.2.1=classpath +com.android.tools.lint:lint-model:31.2.1=classpath +com.android.tools.lint:lint-typedef-remover:31.2.1=classpath +com.android.tools.utp:android-device-provider-ddmlib-proto:31.2.1=classpath +com.android.tools.utp:android-device-provider-gradle-proto:31.2.1=classpath +com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.2.1=classpath +com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.2.1=classpath +com.android.tools.utp:android-test-plugin-host-coverage-proto:31.2.1=classpath +com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.2.1=classpath +com.android.tools.utp:android-test-plugin-host-logcat-proto:31.2.1=classpath +com.android.tools.utp:android-test-plugin-host-retention-proto:31.2.1=classpath +com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.2.1=classpath +com.android.tools:annotations:31.2.1=classpath +com.android.tools:common:31.2.1=classpath +com.android.tools:dvlib:31.2.1=classpath +com.android.tools:repository:31.2.1=classpath +com.android.tools:sdk-common:31.2.1=classpath +com.android.tools:sdklib:31.2.1=classpath +com.android:signflinger:8.2.1=classpath +com.android:zipflinger:8.2.1=classpath com.google.android.gms:strict-version-matcher-plugin:1.2.4=classpath com.google.android:annotations:4.1.1.4=classpath com.google.api.grpc:proto-google-common-protos:2.0.1=classpath com.google.auto.value:auto-value-annotations:1.6.2=classpath com.google.code.findbugs:jsr305:3.0.2=classpath -com.google.code.gson:gson:2.8.9=classpath +com.google.code.gson:gson:2.10=classpath com.google.crypto.tink:tink:1.7.0=classpath com.google.dagger:dagger:2.28.3=classpath com.google.errorprone:error_prone_annotations:2.11.0=classpath @@ -100,8 +100,8 @@ net.java.dev.jna:jna:5.6.0=classpath net.sf.jopt-simple:jopt-simple:4.9=classpath net.sf.kxml:kxml2:2.3.0=classpath org.apache.commons:commons-compress:1.21=classpath -org.apache.httpcomponents:httpclient:4.5.13=classpath -org.apache.httpcomponents:httpcore:4.4.15=classpath +org.apache.httpcomponents:httpclient:4.5.14=classpath +org.apache.httpcomponents:httpcore:4.4.16=classpath org.apache.httpcomponents:httpmime:4.5.6=classpath org.bitbucket.b_c:jose4j:0.7.0=classpath org.bouncycastle:bcpkix-jdk15on:1.67=classpath @@ -112,34 +112,33 @@ org.glassfish.jaxb:jaxb-runtime:2.3.2=classpath org.glassfish.jaxb:txw2:2.3.2=classpath org.jdom:jdom2:2.0.6=classpath org.jetbrains.intellij.deps:trove4j:1.0.20200330=classpath -org.jetbrains.kotlin:kotlin-android-extensions:1.8.21=classpath -org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.8.21=classpath -org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.21=classpath -org.jetbrains.kotlin:kotlin-compiler-runner:1.8.21=classpath -org.jetbrains.kotlin:kotlin-daemon-client:1.8.21=classpath -org.jetbrains.kotlin:kotlin-daemon-embeddable:1.8.21=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.8.21=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.8.21=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.8.21=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.8.21=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.8.21=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.21=classpath -org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.8.21=classpath -org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.8.21=classpath -org.jetbrains.kotlin:kotlin-native-utils:1.8.21=classpath -org.jetbrains.kotlin:kotlin-project-model:1.8.21=classpath -org.jetbrains.kotlin:kotlin-reflect:1.8.20-RC2=classpath -org.jetbrains.kotlin:kotlin-scripting-common:1.8.21=classpath -org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.8.21=classpath -org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.8.21=classpath -org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.21=classpath -org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20-RC2=classpath -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20-RC2=classpath -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20-RC2=classpath -org.jetbrains.kotlin:kotlin-stdlib:1.8.20-RC2=classpath -org.jetbrains.kotlin:kotlin-tooling-core:1.8.21=classpath -org.jetbrains.kotlin:kotlin-util-io:1.8.21=classpath -org.jetbrains.kotlin:kotlin-util-klib:1.8.21=classpath +org.jetbrains.kotlin:kotlin-android-extensions:1.9.22=classpath +org.jetbrains.kotlin:kotlin-build-tools-api:1.9.22=classpath +org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22=classpath +org.jetbrains.kotlin:kotlin-compiler-runner:1.9.22=classpath +org.jetbrains.kotlin:kotlin-daemon-client:1.9.22=classpath +org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.22=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.22=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.22=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.22=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.22=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.22=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.22=classpath +org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.22=classpath +org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.22=classpath +org.jetbrains.kotlin:kotlin-native-utils:1.9.22=classpath +org.jetbrains.kotlin:kotlin-project-model:1.9.22=classpath +org.jetbrains.kotlin:kotlin-reflect:1.9.0=classpath +org.jetbrains.kotlin:kotlin-scripting-common:1.9.22=classpath +org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22=classpath +org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.22=classpath +org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.22=classpath +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0=classpath +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0=classpath +org.jetbrains.kotlin:kotlin-stdlib:1.9.22=classpath +org.jetbrains.kotlin:kotlin-tooling-core:1.9.22=classpath +org.jetbrains.kotlin:kotlin-util-io:1.9.22=classpath +org.jetbrains.kotlin:kotlin-util-klib:1.9.22=classpath org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath org.jetbrains:annotations:13.0=classpath org.jvnet.staxex:stax-ex:1.8.1=classpath diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index d11cdd907dd..2ea3535dc05 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/android/gradlew b/android/gradlew index 0adc8e1a532..1aa94a42690 100755 --- a/android/gradlew +++ b/android/gradlew @@ -145,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -153,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -202,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/android/gradlew.bat b/android/gradlew.bat index 93e3f59f135..25da30dbdee 100644 --- a/android/gradlew.bat +++ b/android/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/android/settings.gradle b/android/settings.gradle index c7d391c3b8d..dbe8a618bb9 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -3,8 +3,8 @@ include ':app' include ':reactnativenotifications' project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/lib/android/app') apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) -include ':react-native-video' -project(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android-exoplayer') include ':watermelondb-jsi' project(':watermelondb-jsi').projectDir = new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android-jsi') includeBuild('../node_modules/@react-native/gradle-plugin') +apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle") +useExpoModules() diff --git a/app/actions/app/global.test.ts b/app/actions/app/global.test.ts new file mode 100644 index 00000000000..8ac3d2c9338 --- /dev/null +++ b/app/actions/app/global.test.ts @@ -0,0 +1,186 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Tutorial} from '@constants'; +import DatabaseManager from '@database/manager'; +import { + getDeviceToken, + getDontAskForReview, + getFirstLaunch, + getLastAskedForReview, + getOnboardingViewed, + getLastViewedChannelIdAndServer, + getLastViewedThreadIdAndServer, + getPushDisabledInServerAcknowledged, + queryGlobalValue, +} from '@queries/app/global'; + +import { + storeGlobal, + storeDeviceToken, + storeOnboardingViewedValue, + storeMultiServerTutorial, + storeProfileLongPressTutorial, + storeSkinEmojiSelectorTutorial, + storeDontAskForReview, + storeLastAskForReview, + storeFirstLaunch, + storeLastViewedChannelIdAndServer, + storeLastViewedThreadIdAndServer, + removeLastViewedChannelIdAndServer, + removeLastViewedThreadIdAndServer, + storePushDisabledInServerAcknowledged, + removePushDisabledInServerAcknowledged, +} from './global'; + +const serverUrl = 'server.test.com'; + +jest.mock('react-native-keychain', () => { + const original = jest.requireActual('react-native-keychain'); + return { + ...original, + getAllInternetPasswordServers: jest.fn(() => Promise.resolve([serverUrl])), + }; +}); + +jest.mock('@utils/log', () => ({ + logError: jest.fn(), +})); + +describe('/app/actions/app/global', () => { + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + test('storeDeviceToken', async () => { + let storedValue = await getDeviceToken(); + expect(storedValue).toBe(''); + + const inputValue = 'new-token'; + await storeDeviceToken(inputValue); + + storedValue = await getDeviceToken(); + expect(storedValue).toBe(inputValue); + }); + + test('storeOnboardingViewedValue', async () => { + let storedValue = await getOnboardingViewed(); + expect(storedValue).toBe(false); + + await storeOnboardingViewedValue(); + storedValue = await getOnboardingViewed(); + expect(storedValue).toBe(true); + + await storeOnboardingViewedValue(false); + storedValue = await getOnboardingViewed(); + expect(storedValue).toBe(false); + }); + + test('storeMultiServerTutorial', async () => { + let records = await queryGlobalValue(Tutorial.MULTI_SERVER)?.fetch(); + expect(records?.[0]?.value).toBeUndefined(); + + await storeMultiServerTutorial(); + records = await queryGlobalValue(Tutorial.MULTI_SERVER)?.fetch(); + expect(records?.[0]?.value).toBe(true); + }); + + test('storeProfileLongPressTutorial', async () => { + let records = await queryGlobalValue(Tutorial.PROFILE_LONG_PRESS)?.fetch(); + expect(records?.[0]?.value).toBeUndefined(); + + await storeProfileLongPressTutorial(); + records = await queryGlobalValue(Tutorial.PROFILE_LONG_PRESS)?.fetch(); + expect(records?.[0]?.value).toBe(true); + }); + + test('storeSkinEmojiSelectorTutorial', async () => { + let records = await queryGlobalValue(Tutorial.EMOJI_SKIN_SELECTOR)?.fetch(); + expect(records?.[0]?.value).toBeUndefined(); + + await storeSkinEmojiSelectorTutorial(); + records = await queryGlobalValue(Tutorial.EMOJI_SKIN_SELECTOR)?.fetch(); + expect(records?.[0]?.value).toBe(true); + }); + + test('storeDontAskForReview', async () => { + let storedValue = await getDontAskForReview(); + expect(storedValue).toBe(false); + + await storeDontAskForReview(); + storedValue = await getDontAskForReview(); + expect(storedValue).toBe(true); + }); + + test('storeLastAskForReview', async () => { + let storedValue = await getLastAskedForReview(); + expect(storedValue).toBe(0); + + await storeLastAskForReview(); + storedValue = await getLastAskedForReview(); + expect(storedValue).toBeCloseTo(Date.now(), -5); + }); + + test('storeFirstLaunch', async () => { + let storedValue = await getFirstLaunch(); + expect(storedValue).toBe(0); + + await storeFirstLaunch(); + storedValue = await getFirstLaunch(); + expect(storedValue).toBeCloseTo(Date.now(), -5); + }); + + test('LastViewedChannelIdAndServer', async () => { + let storedValue = await getLastViewedChannelIdAndServer(); + expect(storedValue).toBeUndefined(); + + await storeLastViewedChannelIdAndServer('channel-id-1'); + storedValue = await getLastViewedChannelIdAndServer(); + expect(storedValue).toMatchObject({channel_id: 'channel-id-1', server_url: serverUrl}); + + await removeLastViewedChannelIdAndServer(); + storedValue = await getLastViewedChannelIdAndServer(); + expect(storedValue).toBeUndefined(); + }); + + test('LastViewedThreadIdAndServer', async () => { + let storedValue = await getLastViewedThreadIdAndServer(); + expect(storedValue).toBeUndefined(); + + await storeLastViewedThreadIdAndServer('thread-id-1'); + storedValue = await getLastViewedThreadIdAndServer(); + expect(storedValue).toMatchObject({thread_id: 'thread-id-1', server_url: serverUrl}); + + await removeLastViewedThreadIdAndServer(); + storedValue = await getLastViewedThreadIdAndServer(); + expect(storedValue).toBeUndefined(); + }); + + test('PushDisabledInServerAcknowledged', async () => { + let storedValue = await getPushDisabledInServerAcknowledged(serverUrl); + expect(storedValue).toBe(false); + + await storePushDisabledInServerAcknowledged(serverUrl); + storedValue = await getPushDisabledInServerAcknowledged(serverUrl); + expect(storedValue).toBe(true); + + await removePushDisabledInServerAcknowledged(serverUrl); + storedValue = await getPushDisabledInServerAcknowledged(serverUrl); + expect(storedValue).toBe(false); + }); + + test('storeGlobal catch error', async () => { + delete DatabaseManager.appDatabase; + + const response = await storeGlobal('key', ''); + + expect(response).toMatchObject({error: expect.any(Error)}); + + // @ts-expect-error testing error message + expect(response.error.message).toBe('App database not found'); + }); +}); diff --git a/app/actions/local/category.test.ts b/app/actions/local/category.test.ts index bdbe152a0e5..c2fe36f40b5 100644 --- a/app/actions/local/category.test.ts +++ b/app/actions/local/category.test.ts @@ -1,9 +1,17 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {DMS_CATEGORY} from '@app/constants/categories'; +import {setCurrentUserId} from '@app/queries/servers/system'; import DatabaseManager from '@database/manager'; -import {handleConvertedGMCategories} from './category'; +import { + deleteCategory, + handleConvertedGMCategories, + storeCategories, + toggleCollapseCategory, + addChannelToDefaultCategory, +} from './category'; import type ServerDataOperator from '@database/operator/server_data_operator'; @@ -18,12 +26,9 @@ describe('handleConvertedGMCategories', () => { let operator: ServerDataOperator; - beforeEach(async () => { + it('base case', async () => { await DatabaseManager.init([serverUrl]); operator = DatabaseManager.serverDatabases[serverUrl]!.operator; - }); - - it('base case', async () => { await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); const defaultCategory: Category = { @@ -66,4 +71,169 @@ describe('handleConvertedGMCategories', () => { expect(models).toBeDefined(); expect(models!.length).toBe(3); // two for removing channel for a custom and a DM category, and one for adding it to default channels category }); + + it('error - no channel category', async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + + const {models, error} = await handleConvertedGMCategories(serverUrl, channelId, teamId1, true); + expect(error).toBeDefined(); + expect(error).toBe('Failed to find default category when handling category of converted GM'); + expect(models).toBeUndefined(); + }); + + it('error - database not prepared', async () => { + const {error} = await handleConvertedGMCategories(serverUrl, channelId, teamId1, true); + expect(error).toBeDefined(); + }); +}); + +describe('category crud', () => { + const serverUrl = 'baseHandler.test.com'; + const teamId1 = 'team_id_1'; + const channelId1 = 'channel_id_1'; + const channelId2 = 'channel_id_2'; + const team: Team = { + id: teamId1, + } as Team; + + let operator: ServerDataOperator; + + beforeAll(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + }); + + it('deleteCategory', async () => { + const defaultCategory: Category = { + id: 'default_category_id', + team_id: teamId1, + type: 'channels', + } as Category; + + await operator.handleCategories({categories: [defaultCategory], prepareRecordsOnly: false}); + + const {category, error} = await deleteCategory(serverUrl, defaultCategory.id); + expect(error).toBeUndefined(); + expect(category).toBeDefined(); + expect(category?.id).toBe(defaultCategory.id); + + const {category: nullCategory, error: error2} = await deleteCategory(serverUrl, 'junk'); + expect(nullCategory).toBeUndefined(); + expect(error2).toBeUndefined(); + }); + + it('storeCategories', async () => { + const defaultCategory: CategoryWithChannels = { + id: 'default_category_id', + team_id: teamId1, + type: 'channels', + channel_ids: [channelId1, channelId2], + } as CategoryWithChannels; + + const {models: prepModels, error: prepError} = await storeCategories(serverUrl, [defaultCategory], false, true); // only prepare + expect(prepError).toBeUndefined(); + expect(prepModels).toBeDefined(); + expect(prepModels!.length).toBe(3); // one for the category and two for the channels added to the category + + const {models, error} = await storeCategories(serverUrl, [defaultCategory], false, false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models!.length).toBe(3); + }); + + it('toggleCollapseCategory', async () => { + const defaultCategory: Category = { + id: 'default_category_id', + team_id: teamId1, + type: 'channels', + collapsed: false, + } as Category; + + await operator.handleCategories({categories: [defaultCategory], prepareRecordsOnly: false}); + + const {category: categoryResult1, error: error1} = await toggleCollapseCategory(serverUrl, defaultCategory.id); + expect(error1).toBeUndefined(); + expect(categoryResult1).toBeDefined(); + expect(categoryResult1?.collapsed).toBe(!defaultCategory.collapsed); + + const {category: categoryResult2, error: error2} = await toggleCollapseCategory(serverUrl, defaultCategory.id); + expect(error2).toBeUndefined(); + expect(categoryResult2).toBeDefined(); + expect(categoryResult2?.collapsed).toBe(defaultCategory.collapsed); + }); +}); + +describe('addChannelToDefaultCategory', () => { + const serverUrl = 'baseHandler.test.com'; + const channelId = 'channel_id_1'; + const teamId1 = 'team_id_1'; + const team: Team = { + id: teamId1, + } as Team; + const channel: Channel = { + id: channelId, + team_id: teamId1, + type: 'O', + } as Channel; + const dmChannel: Channel = { + id: channelId, + team_id: '', + type: 'D', + } as Channel; + + let operator: ServerDataOperator; + + it('base case', async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + setCurrentUserId(operator, 'userid'); + + const myTeams: MyTeam[] = [{ + id: team.id, + roles: 'team_user', + }]; + + await operator.handleMyTeam({myTeams, prepareRecordsOnly: false}); + + const defaultCategory: Category = { + id: 'default_category_id', + team_id: teamId1, + type: 'channels', + } as Category; + + const dmCategory: Category = { + id: 'dm_category_id', + team_id: teamId1, + type: DMS_CATEGORY, + } as Category; + + await operator.handleCategories({categories: [defaultCategory, dmCategory], prepareRecordsOnly: false}); + + const {models, error} = await addChannelToDefaultCategory(serverUrl, channel); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models!.length).toBe(1); // one for the channel + + const {models: dmModels, error: dmError} = await addChannelToDefaultCategory(serverUrl, dmChannel); + expect(dmError).toBeUndefined(); + expect(dmModels).toBeDefined(); + expect(dmModels!.length).toBe(1); // one for the dm channel + }); + + it('error - no current user', async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + const {models, error} = await addChannelToDefaultCategory(serverUrl, channel); + expect(error).toBeDefined(); + expect(error).toBe('no current user id'); + expect(models).toBeUndefined(); + }); + + it('error - database not prepared', async () => { + const {error} = await addChannelToDefaultCategory(serverUrl, channel); + expect(error).toBeDefined(); + }); }); diff --git a/app/actions/local/channel.test.ts b/app/actions/local/channel.test.ts index 5fbbae508b9..6969f6ce5c1 100644 --- a/app/actions/local/channel.test.ts +++ b/app/actions/local/channel.test.ts @@ -1,6 +1,8 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +/* eslint-disable max-lines */ + import {DeviceEventEmitter} from 'react-native'; import {Navigation} from '@constants'; @@ -11,8 +13,23 @@ import {getCommonSystemValues, getTeamHistory} from '@queries/servers/system'; import {getTeamChannelHistory} from '@queries/servers/team'; import {dismissAllModalsAndPopToRoot, dismissAllModalsAndPopToScreen} from '@screens/navigation'; -import {switchToChannel} from './channel'; - +import { + switchToChannel, + removeCurrentUserFromChannel, + setChannelDeleteAt, + selectAllMyChannelIds, + markChannelAsUnread, + resetMessageCount, + storeMyChannelsForTeam, + updateMyChannelFromWebsocket, + updateChannelInfoFromChannel, + updateLastPostAt, + updateChannelsDisplayName, + showUnreadChannelsOnly, + updateDmGmDisplayName, +} from './channel'; + +import type {ChannelModel, MyChannelModel, SystemModel} from '@app/database/models/server'; import type ServerDataOperator from '@database/operator/server_data_operator'; import type {Database} from '@nozbe/watermelondb'; @@ -436,3 +453,683 @@ describe('switchToChannel', () => { expect(listenerCallback).toHaveBeenCalledTimes(1); }); }); + +describe('removeCurrentUserFromChannel', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const teamId = 'tId1'; + const team: Team = { + id: teamId, + } as Team; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, + } as Channel; + const channelMember: ChannelMembership = { + id: 'id', + channel_id: channelId, + msg_count: 0, + } as ChannelMembership; + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const {error} = await removeCurrentUserFromChannel('foo', 'channelId'); + expect(error).toBeTruthy(); + }); + + it('handle no member', async () => { + const {models, error} = await removeCurrentUserFromChannel(serverUrl, 'channelId'); + expect(error).toBeUndefined(); + expect(models?.length).toBe(0); + }); + + it('handle no channel', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}, {id: SYSTEM_IDENTIFIERS.CURRENT_CHANNEL_ID, value: channelId}], prepareRecordsOnly: false}); + + const {models, error} = await removeCurrentUserFromChannel(serverUrl, channelId); + expect(error).toBeTruthy(); + expect(models).toBeUndefined(); + }); + + it('remove user from current channel', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}, {id: SYSTEM_IDENTIFIERS.CURRENT_CHANNEL_ID, value: channelId}], prepareRecordsOnly: false}); + + const {models, error} = await removeCurrentUserFromChannel(serverUrl, channelId); + + const {member} = await queryDatabaseValues(operator.database, teamId, channelId); + + expect(error).toBeUndefined(); + expect(member).toBeUndefined(); + expect(models?.length).toBe(2); // Deleted my channel and channel + }); +}); + +describe('setChannelDeleteAt', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const teamId = 'tId1'; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, + delete_at: 0, + } as Channel; + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const {error} = await setChannelDeleteAt('foo', channelId, 0); + expect(error).toBeTruthy(); + }); + + it('handle no channel', async () => { + const {models, error} = await setChannelDeleteAt(serverUrl, channelId, 0); + expect(error).toBeDefined(); + expect(error).toBe(`channel with id ${channelId} not found`); + expect(models).toBeUndefined(); + }); + + it('set channel delete at', async () => { + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + + const {models, error} = await setChannelDeleteAt(serverUrl, channelId, 123); + expect(error).toBeUndefined(); + expect(models?.length).toBe(1); // Deleted channel + expect(models![0].deleteAt).toBe(123); + }); +}); + +describe('selectAllMyChannelIds', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const teamId = 'tId1'; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, + delete_at: 0, + } as Channel; + const channelMember: ChannelMembership = { + id: 'id', + channel_id: channelId, + msg_count: 0, + } as ChannelMembership; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const result = await selectAllMyChannelIds('foo'); + expect(result.length).toBe(0); + }); + + it('handle no my channels', async () => { + const result = await selectAllMyChannelIds(serverUrl); + expect(result.length).toBe(0); + }); + + it('select my channels', async () => { + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + + const result = await selectAllMyChannelIds(serverUrl); + expect(result.length).toBe(1); // My channel + expect(result[0]).toBe(channelId); + }); +}); + +describe('markChannelAsUnread', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const teamId = 'tId1'; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, + delete_at: 0, + } as Channel; + const channelMember: ChannelMembership = { + id: 'id', + channel_id: channelId, + msg_count: 0, + } as ChannelMembership; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const {member, error} = await markChannelAsUnread('foo', channelId, 10, 1, 123, false); + expect(error).toBeTruthy(); + expect(member).toBeUndefined(); + }); + + it('handle no member', async () => { + const {member, error} = await markChannelAsUnread(serverUrl, channelId, 10, 1, 123, false); + expect(error).toBe('not a member'); + expect(member).toBeUndefined(); + }); + + it('mark channel as unread', async () => { + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + + const {member, error} = await markChannelAsUnread(serverUrl, channelId, 10, 1, 123, false); + expect(error).toBeUndefined(); + expect(member).toBeDefined(); + expect(member?.viewedAt).toBe(122); + expect(member?.lastViewedAt).toBe(122); + expect(member?.messageCount).toBe(10); + expect(member?.mentionsCount).toBe(1); + }); +}); + +describe('resetMessageCount', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const teamId = 'tId1'; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 10, + delete_at: 0, + } as Channel; + const channelMember: ChannelMembership = { + id: 'id', + channel_id: channelId, + msg_count: 10, + } as ChannelMembership; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const result = await resetMessageCount('foo', channelId); + expect((result as { error: unknown }).error).toBeDefined(); + }); + + it('handle no member', async () => { + const result = await resetMessageCount(serverUrl, channelId); + expect((result as { error: unknown }).error).toBe('not a member'); + }); + + it('reset message count', async () => { + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + + const member = await resetMessageCount(serverUrl, channelId); + expect((member as { error: unknown }).error).toBeUndefined(); + expect(member).toBeDefined(); + expect((member as MyChannelModel).messageCount).toBe(0); + }); +}); + +describe('storeMyChannelsForTeam', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const teamId = 'tId1'; + const team: Team = { + id: teamId, + } as Team; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, + delete_at: 0, + } as Channel; + const channelMember: ChannelMembership = { + id: 'id', + user_id: 'userid', + channel_id: channelId, + msg_count: 0, + } as ChannelMembership; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const {models, error} = await storeMyChannelsForTeam('foo', teamId, [channel], [channelMember], false, false); + expect(models).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('handle no member', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: 'userid'}], prepareRecordsOnly: false}); + + const {models, error} = await storeMyChannelsForTeam(serverUrl, teamId, [], [], false, false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models!.length).toBe(0); + }); + + it('store my channels for team', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + + const {models: prepModels, error: prepError} = await storeMyChannelsForTeam(serverUrl, teamId, [channel], [channelMember], true, false); + expect(prepError).toBeUndefined(); + expect(prepModels).toBeDefined(); + expect(prepModels!.length).toBe(5); // Channel, channel info, member, settings and my channel + + const {models, error} = await storeMyChannelsForTeam(serverUrl, teamId, [channel], [channelMember], false, false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models!.length).toBe(5); + }); +}); + +describe('updateMyChannelFromWebsocket', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const teamId = 'tId1'; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, + delete_at: 0, + } as Channel; + const channelMember: ChannelMembership = { + id: 'id', + user_id: 'userid', + channel_id: channelId, + msg_count: 0, + roles: '', + } as ChannelMembership; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const {model, error} = await updateMyChannelFromWebsocket('foo', channelMember, false); + expect(model).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('update my channel from websocket', async () => { + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + + const {model, error} = await updateMyChannelFromWebsocket(serverUrl, {...channelMember, roles: 'channel_user'}, false); + expect(error).toBeUndefined(); + expect(model).toBeDefined(); + expect(model?.roles).toBe('channel_user'); + }); +}); + +describe('updateChannelInfoFromChannel', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const teamId = 'tId1'; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, + delete_at: 0, + } as Channel; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const {model, error} = await updateChannelInfoFromChannel('foo', channel, false); + expect(model).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('update channel info from channel', async () => { + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + + const {model, error} = await updateChannelInfoFromChannel(serverUrl, {...channel, header: 'newheader'}, false); + expect(error).toBeUndefined(); + expect(model).toBeDefined(); + expect(model?.length).toBe(1); + expect(model![0].header).toBe('newheader'); + }); +}); + +describe('updateLastPostAt', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const teamId = 'tId1'; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, + delete_at: 0, + } as Channel; + const channelMember: ChannelMembership = { + id: 'id', + user_id: 'userid', + channel_id: channelId, + msg_count: 0, + roles: '', + } as ChannelMembership; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const {member, error} = await updateLastPostAt('foo', channelId, 123, false); + expect(member).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('handle no member', async () => { + const {member, error} = await updateLastPostAt(serverUrl, channelId, 123, false); + expect(error).toBeDefined(); + expect(error).toBe('not a member'); + expect(member).toBeUndefined(); + }); + + it('update last post at', async () => { + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + + const {member, error} = await updateLastPostAt(serverUrl, channelId, 123, false); + expect(error).toBeUndefined(); + expect(member).toBeDefined(); + expect(member?.lastPostAt).toBe(123); + }); +}); + +describe('updateChannelsDisplayName', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const dmChannel: Channel = { + id: channelId, + name: 'userid__userid2', + display_name: '', + team_id: '', + total_msg_count: 0, + delete_at: 0, + type: 'D', + } as Channel; + const dmChannelMember: ChannelMembership = { + id: 'id', + user_id: 'userid', + channel_id: dmChannel.id, + msg_count: 0, + roles: '', + } as ChannelMembership; + const gmChannel: Channel = { + id: 'id2', + name: 'name', + display_name: '', + team_id: '', + total_msg_count: 0, + delete_at: 0, + type: 'G', + } as Channel; + const gmChannelMember: ChannelMembership = { + id: 'id', + user_id: 'userid', + channel_id: gmChannel.id, + msg_count: 0, + roles: '', + } as ChannelMembership; + const user: UserProfile = { + id: 'userid', + username: 'username', + roles: '', + } as UserProfile; + const user2: UserProfile = { + id: 'userid2', + username: 'username2', + first_name: 'first', + last_name: 'last', + roles: '', + } as UserProfile; + const user3: UserProfile = { + id: 'userid3', + username: 'username3', + first_name: 'first', + last_name: 'last', + roles: '', + } as UserProfile; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const {models, error} = await updateChannelsDisplayName('foo', [], [], false); + expect(models).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('handle no currnet user', async () => { + const {models, error} = await updateChannelsDisplayName(serverUrl, [], [], false); + expect(models).toBeUndefined(); + expect(error).toBeUndefined(); + }); + + it('update channels display name', async () => { + const channelModels = await operator.handleChannel({channels: [dmChannel, gmChannel], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user, user2, user3], prepareRecordsOnly: false}); + await operator.handleChannelMembership({channelMemberships: [{...gmChannelMember, user_id: user2.id}, {...gmChannelMember, user_id: user3.id}], prepareRecordsOnly: false}); + await operator.handleMyChannel({channels: [dmChannel, gmChannel], myChannels: [dmChannelMember, gmChannelMember], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + + const {models, error} = await updateChannelsDisplayName(serverUrl, channelModels, [user, user2], false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models?.length).toBe(2); + expect((models![0] as ChannelModel).displayName).toBe(user2.username); + expect((models![1] as ChannelModel).displayName).toBe(`${user2.username}, ${user3.username}`); + }); +}); + +describe('showUnreadChannelsOnly', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const teamId = 'tId1'; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, + delete_at: 0, + } as Channel; + const channelMember: ChannelMembership = { + id: 'id', + user_id: 'userid', + channel_id: channelId, + msg_count: 0, + roles: '', + } as ChannelMembership; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const result = await showUnreadChannelsOnly('foo', true); + expect((result as { error: unknown}).error).toBeTruthy(); + }); + + it('show unread channels only', async () => { + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + + const result = await showUnreadChannelsOnly(serverUrl, true); + expect((result as { error: unknown}).error).toBeUndefined(); + const models = (result as SystemModel[]); + expect(models).toBeDefined(); + expect(models?.length).toBe(1); + expect(models![0].id).toBe(SYSTEM_IDENTIFIERS.ONLY_UNREADS); + expect(models![0].value).toBe(true); + }); +}); + +describe('updateDmGmDisplayName', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const channelId = 'id1'; + const dmChannel: Channel = { + id: channelId, + name: 'userid__userid2', + display_name: '', + team_id: '', + total_msg_count: 0, + delete_at: 0, + type: 'D', + } as Channel; + const dmChannelMember: ChannelMembership = { + id: 'id', + user_id: 'userid', + channel_id: dmChannel.id, + msg_count: 0, + roles: '', + } as ChannelMembership; + const gmChannel: Channel = { + id: 'id2', + name: 'name', + display_name: '', + team_id: '', + total_msg_count: 0, + delete_at: 0, + type: 'G', + } as Channel; + const gmChannelMember: ChannelMembership = { + id: 'id', + user_id: 'userid', + channel_id: gmChannel.id, + msg_count: 0, + roles: '', + } as ChannelMembership; + const user: UserProfile = { + id: 'userid', + username: 'username', + roles: '', + } as UserProfile; + const user2: UserProfile = { + id: 'userid2', + username: 'username2', + first_name: 'first', + last_name: 'last', + roles: '', + } as UserProfile; + const user3: UserProfile = { + id: 'userid3', + username: 'username3', + first_name: 'first', + last_name: 'last', + roles: '', + } as UserProfile; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('handle not found database', async () => { + const {channels, error} = await updateDmGmDisplayName('foo'); + expect(channels).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('handle no currnet user', async () => { + const {channels, error} = await updateDmGmDisplayName(serverUrl); + expect(channels).toBeUndefined(); + expect(error).toBeDefined(); + expect(error).toBe('The current user id could not be retrieved from the database'); + }); + + it('update dm gm display name', async () => { + await operator.handleChannel({channels: [dmChannel, gmChannel], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user, user2, user3], prepareRecordsOnly: false}); + await operator.handleChannelMembership({channelMemberships: [gmChannelMember, dmChannelMember, {...gmChannelMember, user_id: user2.id}, {...gmChannelMember, user_id: user3.id}], prepareRecordsOnly: false}); + await operator.handleMyChannel({channels: [dmChannel, gmChannel], myChannels: [dmChannelMember, gmChannelMember], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + + const {channels, error} = await updateDmGmDisplayName(serverUrl); + expect(error).toBeUndefined(); + expect(channels).toBeDefined(); + expect(channels?.length).toBe(2); + expect((channels![0] as ChannelModel).displayName).toBe(user2.username); + expect((channels![1] as ChannelModel).displayName).toBe(`${user2.username}, ${user3.username}`); + }); +}); diff --git a/app/actions/local/channel.ts b/app/actions/local/channel.ts index c2efcedcf87..493d58e0df9 100644 --- a/app/actions/local/channel.ts +++ b/app/actions/local/channel.ts @@ -139,15 +139,17 @@ export async function setChannelDeleteAt(serverUrl: string, channelId: string, d const {operator, database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); const channel = await getChannelById(database, channelId); if (!channel) { - return; + return {error: `channel with id ${channelId} not found`}; } const model = channel.prepareUpdate((c) => { c.deleteAt = deleteAt; }); await operator.batchRecords([model], 'setChannelDeleteAt'); + return {models: [model]}; } catch (error) { logError('FAILED TO BATCH CHANGES FOR CHANNEL DELETE AT', error); + return {error}; } } diff --git a/app/actions/local/channel_bookmark.test.ts b/app/actions/local/channel_bookmark.test.ts new file mode 100644 index 00000000000..91e9b108d5e --- /dev/null +++ b/app/actions/local/channel_bookmark.test.ts @@ -0,0 +1,125 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import DatabaseManager from '@database/manager'; + +import { + handleBookmarkAddedOrDeleted, + handleBookmarkEdited, + handleBookmarkSorted, +} from './channel_bookmark'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; +import type {Model} from '@nozbe/watermelondb'; + +const serverUrl = 'baseHandler.test.com'; +let operator: ServerDataOperator; + +let mockGenerateId: jest.Mock; +jest.mock('@utils/general', () => { + const original = jest.requireActual('@utils/general'); + mockGenerateId = jest.fn(() => 'testpostid'); + return { + ...original, + generateId: mockGenerateId, + }; +}); + +const channelId = 'channelid1'; +const bookmark = { + channel_id: channelId, + id: 'bookmarkid', + owner_id: 'userid1', + type: 'link', + sort_order: 0, +} as ChannelBookmark; +const channel: Channel = { + id: channelId, + team_id: 'teamid', + total_msg_count: 0, +} as Channel; +const channelMember: ChannelMembership = { + id: 'id', + channel_id: channelId, + user_id: 'userid1', + msg_count: 0, +} as ChannelMembership; + +beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; +}); + +afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); +}); + +describe('handleBookmarks', () => { + it('handleBookmarkAddedOrDeleted - handle not found database', async () => { + const {error} = await handleBookmarkAddedOrDeleted('foo', {} as WebSocketMessage) as {error: unknown}; + expect(error).toBeTruthy(); + }); + + it('handleBookmarkAddedOrDeleted - no channel', async () => { + const {models} = await handleBookmarkAddedOrDeleted(serverUrl, {data: {bookmark: JSON.stringify(bookmark)}} as WebSocketMessage) as {models: undefined}; + expect(models).toBeUndefined(); + }); + + it('handleBookmarkAddedOrDeleted - base case', async () => { + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + + const {models} = await handleBookmarkAddedOrDeleted(serverUrl, {data: {bookmark: JSON.stringify(bookmark)}} as WebSocketMessage) as {models: Model[]}; + expect(models).toBeDefined(); + expect(models?.length).toBe(1); // channel bookmark + }); + + it('handleBookmarkEdited - handle not found database', async () => { + const {error} = await handleBookmarkEdited('foo', {} as WebSocketMessage) as {error: unknown}; + expect(error).toBeTruthy(); + }); + + it('handleBookmarkEdited - no channel', async () => { + const bookmarkResponse = {updated: bookmark, deleted: {...bookmark, id: 'bookmarkid2'}} as UpdateChannelBookmarkResponse; + const {models} = await handleBookmarkEdited(serverUrl, {data: {bookmarks: JSON.stringify(bookmarkResponse)}} as WebSocketMessage) as {models: undefined}; + expect(models).toBeUndefined(); + }); + + it('handleBookmarkEdited - base case', async () => { + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + + const bookmarkResponse = {updated: bookmark, deleted: {...bookmark, id: 'bookmarkid2', sort_order: 1}} as UpdateChannelBookmarkResponse; + + const {models} = await handleBookmarkEdited(serverUrl, {data: {bookmarks: JSON.stringify(bookmarkResponse)}} as WebSocketMessage) as {models: Model[]}; + expect(models).toBeDefined(); + expect(models?.length).toBe(2); // 2 channel bookmarks + }); + + it('handleBookmarkSorted - handle not found database', async () => { + const {error} = await handleBookmarkSorted('foo', {} as WebSocketMessage) as {error: unknown}; + expect(error).toBeTruthy(); + }); + + it('handleBookmarkSorted - no channel', async () => { + const bookmarks = [bookmark, {...bookmark, id: 'bookmarkid2', sort_order: 1}]; + const {models} = await handleBookmarkSorted(serverUrl, {data: {bookmarks: JSON.stringify(bookmarks)}} as WebSocketMessage) as {models: undefined}; + expect(models).toBeUndefined(); + }); + + it('handleBookmarkSorted - no bookmarks', async () => { + const {models} = await handleBookmarkSorted(serverUrl, {data: {bookmarks: JSON.stringify([])}} as WebSocketMessage) as {models: undefined}; + expect(models).toBeUndefined(); + }); + + it('handleBookmarkSorted - base case', async () => { + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + + const bookmarks = [bookmark, {...bookmark, id: 'bookmarkid2', sort_order: 1}]; + + const {models} = await handleBookmarkSorted(serverUrl, {data: {bookmarks: JSON.stringify(bookmarks)}} as WebSocketMessage) as {models: Model[]}; + expect(models).toBeDefined(); + expect(models?.length).toBe(2); // 2 channel bookmarks + }); +}); diff --git a/app/actions/local/channel_bookmark.ts b/app/actions/local/channel_bookmark.ts new file mode 100644 index 00000000000..ff2479756f0 --- /dev/null +++ b/app/actions/local/channel_bookmark.ts @@ -0,0 +1,55 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import DatabaseManager from '@database/manager'; +import {getMyChannel} from '@queries/servers/channel'; +import {logError} from '@utils/log'; + +async function handleBookmarks(serverUrl: string, bookmarks: ChannelBookmarkWithFileInfo[], prepareRecordsOnly = false) { + if (!bookmarks.length) { + return {models: undefined}; + } + + const {database, operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const myChannel = await getMyChannel(database, bookmarks[0].channel_id); + if (!myChannel) { + return {models: undefined}; + } + + const models = await operator.handleChannelBookmark({bookmarks, prepareRecordsOnly}); + return {models}; +} + +export async function handleBookmarkAddedOrDeleted(serverUrl: string, msg: WebSocketMessage, prepareRecordsOnly = false) { + try { + const bookmark: ChannelBookmarkWithFileInfo = JSON.parse(msg.data.bookmark); + return handleBookmarks(serverUrl, [bookmark], prepareRecordsOnly); + } catch (error) { + logError('cannot handle bookmark added websocket event', error); + return {error}; + } +} + +export async function handleBookmarkEdited(serverUrl: string, msg: WebSocketMessage, prepareRecordsOnly = false) { + try { + const edited: UpdateChannelBookmarkResponse = JSON.parse(msg.data.bookmarks); + const bookmarks = [edited.updated]; + if (edited.deleted) { + bookmarks.push(edited.deleted); + } + return handleBookmarks(serverUrl, bookmarks, prepareRecordsOnly); + } catch (error) { + logError('cannot handle bookmark updated websocket event', error); + return {error}; + } +} + +export async function handleBookmarkSorted(serverUrl: string, msg: WebSocketMessage, prepareRecordsOnly = false) { + try { + const bookmarks: ChannelBookmarkWithFileInfo[] = JSON.parse(msg.data.bookmarks); + return handleBookmarks(serverUrl, bookmarks, prepareRecordsOnly); + } catch (error) { + logError('cannot handle bookmark sorted websocket event', error); + return {error}; + } +} diff --git a/app/actions/local/draft.test.ts b/app/actions/local/draft.test.ts new file mode 100644 index 00000000000..faae4a98e0d --- /dev/null +++ b/app/actions/local/draft.test.ts @@ -0,0 +1,236 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +/* eslint-disable max-lines */ + +import DatabaseManager from '@database/manager'; + +import { + updateDraftFile, + removeDraftFile, + updateDraftMessage, + addFilesToDraft, + removeDraft, + updateDraftPriority, +} from './draft'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; +import type DraftModel from '@typings/database/models/servers/draft'; + +let operator: ServerDataOperator; +const serverUrl = 'baseHandler.test.com'; +const channelId = 'id1'; +const teamId = 'tId1'; +const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, +} as Channel; +const fileInfo: FileInfo = { + id: 'fileid', + clientId: 'clientid', + localPath: 'path1', +} as FileInfo; +const draft: Draft = { + channel_id: channel.id, + message: 'test', + root_id: '', + update_at: Date.now(), +} as Draft; + +beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; +}); + +afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); +}); + +describe('updateDraftFile', () => { + it('handle not found database', async () => { + const {error} = await updateDraftFile('foo', channelId, '', fileInfo, false); + expect(error).toBeTruthy(); + }); + + it('handle no draft', async () => { + const {error} = await updateDraftFile(serverUrl, channelId, '', fileInfo, false); + expect(error).toBeTruthy(); + expect(error).toBe('no draft'); + }); + + it('handle no file', async () => { + await operator.handleDraft({drafts: [draft], prepareRecordsOnly: false}); + + const {error} = await updateDraftFile(serverUrl, channelId, '', fileInfo, false); + expect(error).toBeTruthy(); + expect(error).toBe('file not found'); + }); + + it('update draft file', async () => { + await operator.handleDraft({drafts: [{...draft, files: [{...fileInfo, localPath: 'path0'}]}], prepareRecordsOnly: false}); + + const {draft: draftModel, error} = await updateDraftFile(serverUrl, channelId, '', fileInfo, false); + expect(error).toBeUndefined(); + expect(draftModel).toBeDefined(); + expect(draftModel?.files?.length).toBe(1); + expect(draftModel?.files![0].localPath).toBe('path1'); + }); +}); + +describe('removeDraftFile', () => { + it('handle not found database', async () => { + const {error} = await removeDraftFile('foo', channelId, '', '', false); + expect(error).toBeTruthy(); + }); + + it('handle no draft', async () => { + const {error} = await removeDraftFile(serverUrl, channelId, '', 'clientid', false); + expect(error).toBeTruthy(); + expect(error).toBe('no draft'); + }); + + it('handle no file', async () => { + await operator.handleDraft({drafts: [draft], prepareRecordsOnly: false}); + + const {error} = await removeDraftFile(serverUrl, channelId, '', 'clientid', false); + expect(error).toBeTruthy(); + expect(error).toBe('file not found'); + }); + + it('remove draft file', async () => { + await operator.handleDraft({drafts: [{...draft, files: [fileInfo]}], prepareRecordsOnly: false}); + + const {draft: draftModel, error} = await removeDraftFile(serverUrl, channelId, '', 'clientid', false); + expect(error).toBeUndefined(); + expect(draftModel).toBeDefined(); + }); + + it('remove draft file, no message', async () => { + await operator.handleDraft({drafts: [{channel_id: channel.id, files: [fileInfo], root_id: '', update_at: Date.now()}], prepareRecordsOnly: false}); + + const {draft: draftModel, error} = await removeDraftFile(serverUrl, channelId, '', 'clientid', false); + expect(error).toBeUndefined(); + expect(draftModel).toBeDefined(); + }); +}); + +describe('updateDraftMessage', () => { + it('handle not found database', async () => { + const result = await updateDraftMessage('foo', channelId, '', 'newmessage', false) as {draft: unknown; error: unknown}; + expect(result.error).toBeDefined(); + expect(result.draft).toBeUndefined(); + }); + + it('update draft message, blank message, no draft', async () => { + const result = await updateDraftMessage(serverUrl, channelId, '', '', false) as {draft: unknown; error: unknown}; + expect(result.error).toBeUndefined(); + expect(result.draft).toBeUndefined(); + }); + + it('update draft message, no draft', async () => { + const models = await updateDraftMessage(serverUrl, channelId, '', 'newmessage', false) as DraftModel[]; + expect(models).toBeDefined(); + expect(models?.length).toBe(1); + }); + + it('update draft message', async () => { + await operator.handleDraft({drafts: [{...draft, files: [fileInfo]}], prepareRecordsOnly: false}); + + const result = await updateDraftMessage(serverUrl, channelId, '', 'newmessage', false) as {draft: DraftModel; error: unknown}; + expect(result.error).toBeUndefined(); + expect(result.draft).toBeDefined(); + expect(result.draft.message).toBe('newmessage'); + }); + + it('update draft message, same message', async () => { + await operator.handleDraft({drafts: [{...draft, files: [fileInfo]}], prepareRecordsOnly: false}); + + const result = await updateDraftMessage(serverUrl, channelId, '', 'test', false) as {draft: DraftModel; error: unknown}; + expect(result.error).toBeUndefined(); + expect(result.draft).toBeDefined(); + expect(result.draft.message).toBe('test'); + }); + + it('update draft message, no file', async () => { + await operator.handleDraft({drafts: [{channel_id: channel.id, files: [], root_id: '', update_at: Date.now()}], prepareRecordsOnly: false}); + + const result = await updateDraftMessage(serverUrl, channelId, '', 'newmessage', false) as {draft: DraftModel; error: unknown}; + expect(result.error).toBeUndefined(); + expect(result.draft).toBeDefined(); + expect(result.draft.message).toBe('newmessage'); + }); +}); + +describe('addFilesToDraft', () => { + it('handle not found database', async () => { + const result = await addFilesToDraft('foo', channelId, '', [], false) as {draft: unknown; error: unknown}; + expect(result.error).toBeDefined(); + expect(result.draft).toBeUndefined(); + }); + + it('add draft files, no draft', async () => { + const models = await addFilesToDraft(serverUrl, channelId, '', [fileInfo], false) as DraftModel[]; + expect(models).toBeDefined(); + expect(models?.length).toBe(1); + }); + + it('add draft files', async () => { + await operator.handleDraft({drafts: [draft], prepareRecordsOnly: false}); + + const result = await addFilesToDraft(serverUrl, channelId, '', [fileInfo], false) as {draft: DraftModel; error: unknown}; + expect(result.error).toBeUndefined(); + expect(result.draft).toBeDefined(); + expect(result?.draft.files.length).toBe(1); + }); +}); + +describe('removeDraft', () => { + it('handle not found database', async () => { + const result = await removeDraft('foo', channelId, ''); + expect(result.error).toBeDefined(); + expect(result.draft).toBeUndefined(); + }); + + it('handle no draft', async () => { + const result = await removeDraft(serverUrl, channelId, ''); + expect(result.error).toBeUndefined(); + expect(result.draft).toBeUndefined(); + }); + + it('remove draft', async () => { + await operator.handleDraft({drafts: [draft], prepareRecordsOnly: false}); + + const result = await removeDraft(serverUrl, channelId, ''); + expect(result.error).toBeUndefined(); + expect(result.draft).toBeDefined(); + }); +}); + +describe('updateDraftPriority', () => { + const postPriority: PostPriority = { + priority: 'urgent', + } as PostPriority; + + it('handle not found database', async () => { + const result = await updateDraftPriority('foo', channelId, '', postPriority) as {draft: unknown; error: unknown}; + expect(result.error).toBeDefined(); + expect(result.draft).toBeUndefined(); + }); + + it('handle no draft', async () => { + const models = await updateDraftPriority(serverUrl, channelId, '', postPriority) as DraftModel[]; + expect(models).toBeDefined(); + expect(models.length).toBe(1); + expect(models[0].metadata?.priority?.priority).toBe(postPriority.priority); + }); + + it('update draft priority', async () => { + await operator.handleDraft({drafts: [draft], prepareRecordsOnly: false}); + + const result = await updateDraftPriority(serverUrl, channelId, '', postPriority) as {draft: DraftModel; error: unknown}; + expect(result.error).toBeUndefined(); + expect(result.draft).toBeDefined(); + expect(result.draft.metadata?.priority?.priority).toBe(postPriority.priority); + }); +}); diff --git a/app/actions/local/draft.ts b/app/actions/local/draft.ts index 3530aeca483..4deaff9843a 100644 --- a/app/actions/local/draft.ts +++ b/app/actions/local/draft.ts @@ -23,6 +23,7 @@ export async function updateDraftFile(serverUrl: string, channelId: string, root newFiles[i] = file; draft.prepareUpdate((d) => { d.files = newFiles; + d.updateAt = Date.now(); }); if (!prepareRecordsOnly) { @@ -54,6 +55,7 @@ export async function removeDraftFile(serverUrl: string, channelId: string, root } else { draft.prepareUpdate((d) => { d.files = draft.files.filter((v, index) => index !== i); + d.updateAt = Date.now(); }); } @@ -81,6 +83,7 @@ export async function updateDraftMessage(serverUrl: string, channelId: string, r channel_id: channelId, root_id: rootId, message, + update_at: Date.now(), }; return operator.handleDraft({drafts: [newDraft], prepareRecordsOnly}); @@ -95,6 +98,7 @@ export async function updateDraftMessage(serverUrl: string, channelId: string, r } else { draft.prepareUpdate((d) => { d.message = message; + d.updateAt = Date.now(); }); } @@ -119,6 +123,7 @@ export async function addFilesToDraft(serverUrl: string, channelId: string, root root_id: rootId, files, message: '', + update_at: Date.now(), }; return operator.handleDraft({drafts: [newDraft], prepareRecordsOnly}); @@ -126,6 +131,7 @@ export async function addFilesToDraft(serverUrl: string, channelId: string, root draft.prepareUpdate((d) => { d.files = [...draft.files, ...files]; + d.updateAt = Date.now(); }); if (!prepareRecordsOnly) { @@ -167,6 +173,7 @@ export async function updateDraftPriority(serverUrl: string, channelId: string, metadata: { priority: postPriority, }, + update_at: Date.now(), }; return operator.handleDraft({drafts: [newDraft], prepareRecordsOnly}); @@ -177,6 +184,7 @@ export async function updateDraftPriority(serverUrl: string, channelId: string, ...d.metadata, priority: postPriority, }; + d.updateAt = Date.now(); }); if (!prepareRecordsOnly) { diff --git a/app/actions/local/file.test.ts b/app/actions/local/file.test.ts new file mode 100644 index 00000000000..067d5cd3f9e --- /dev/null +++ b/app/actions/local/file.test.ts @@ -0,0 +1,55 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import DatabaseManager from '@database/manager'; + +import { + updateLocalFile, + updateLocalFilePath, +} from './file'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; +import type FileModel from '@typings/database/models/servers/file'; + +describe('updateLocalFiles', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const fileInfo: FileInfo = { + id: 'fileid', + clientId: 'clientid', + localPath: 'path1', + } as FileInfo; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('updateLocalFile - handle not found database', async () => { + const {error} = await updateLocalFile('foo', fileInfo) as {error: unknown}; + expect(error).toBeTruthy(); + }); + + it('updateLocalFile', async () => { + const models = await updateLocalFile(serverUrl, fileInfo) as FileModel[]; + expect(models).toBeDefined(); + expect(models.length).toBe(1); + expect(models![0].id).toBe('fileid'); + }); + + it('updateLocalFilePath - handle not found database', async () => { + const {error} = await updateLocalFilePath('foo', fileInfo.id as string, 'newpath'); + expect(error).toBeTruthy(); + }); + + it('updateLocalFilePath', async () => { + await operator.handleFiles({files: [fileInfo], prepareRecordsOnly: false}); + + const {error} = await updateLocalFilePath(serverUrl, fileInfo.id as string, 'newpath'); + expect(error).toBeUndefined(); + }); +}); diff --git a/app/actions/local/file.ts b/app/actions/local/file.ts index 649ef9666d0..a4fdba9a781 100644 --- a/app/actions/local/file.ts +++ b/app/actions/local/file.ts @@ -34,3 +34,12 @@ export const updateLocalFilePath = async (serverUrl: string, fileId: string, loc } }; +export const getLocalFileInfo = async (serverUrl: string, fileId: string) => { + try { + const {database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const file = await getFileById(database, fileId); + return {file}; + } catch (error) { + return {error}; + } +}; diff --git a/app/actions/local/group.test.ts b/app/actions/local/group.test.ts new file mode 100644 index 00000000000..7d13939e7ff --- /dev/null +++ b/app/actions/local/group.test.ts @@ -0,0 +1,116 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import * as remoteGroups from '@actions/remote/groups'; +import DatabaseManager from '@database/manager'; + +import { + searchGroupsByName, + searchGroupsByNameInTeam, + searchGroupsByNameInChannel, +} from './group'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; + +jest.mock('@actions/remote/groups'); + +const mockedRemoteGroups = jest.mocked(remoteGroups); + +describe('searchGroups', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + const teamId = 'teamid1'; + const channelId = 'channelid1'; + const group: Group = { + id: 'kjlw9j1ttnxwig7tnqgebg7dtipno', + name: 'groupname', + display_name: 'Test', + source: 'custom', + remote_id: 'iuh4r89egnslnvakjsdjhg', + description: 'Test description', + member_count: 0, + allow_reference: true, + create_at: 0, + update_at: 0, + delete_at: 0, + } as Group; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('searchGroupsByName - handle not found database', async () => { + const models = await searchGroupsByName('foo', 'test'); + expect(models).toBeDefined(); + expect(models.length).toBe(0); + }); + + it('searchGroupsByName - no groups', async () => { + const models = await searchGroupsByName(serverUrl, 'test'); + expect(models).toBeDefined(); + expect(models.length).toBe(0); + }); + + it('searchGroupsByName - fetch failed', async () => { + await operator.handleGroups({groups: [group], prepareRecordsOnly: false}); + mockedRemoteGroups.fetchGroupsForAutocomplete.mockReturnValueOnce(Promise.reject(new Error('fail'))); + + const models = await searchGroupsByName(serverUrl, group.name); + expect(models).toBeDefined(); + expect(models.length).toBe(1); + expect(models[0].id).toBe(group.id); + }); + + it('searchGroupsByNameInTeam - handle not found database', async () => { + const models = await searchGroupsByNameInTeam('foo', 'test', teamId); + expect(models).toBeDefined(); + expect(models.length).toBe(0); + }); + + it('searchGroupsByNameInTeam - no groups', async () => { + const models = await searchGroupsByNameInTeam(serverUrl, 'test', teamId); + expect(models).toBeDefined(); + expect(models.length).toBe(0); + }); + + it('searchGroupsByNameInTeam - fetch failed', async () => { + await operator.handleGroups({groups: [group], prepareRecordsOnly: false}); + await operator.handleGroupTeamsForTeam({groups: [group], teamId, prepareRecordsOnly: false}); + + mockedRemoteGroups.fetchFilteredTeamGroups.mockReturnValueOnce(Promise.reject(new Error('fail'))); + + const models = await searchGroupsByNameInTeam(serverUrl, group.name, teamId); + expect(models).toBeDefined(); + expect(models.length).toBe(1); + expect(models[0].id).toBe(group.id); + }); + + it('searchGroupsByNameInChannel - handle not found database', async () => { + const models = await searchGroupsByNameInChannel('foo', 'test', channelId); + expect(models).toBeDefined(); + expect(models.length).toBe(0); + }); + + it('searchGroupsByNameInChannel - no groups', async () => { + const models = await searchGroupsByNameInChannel(serverUrl, 'test', channelId); + expect(models).toBeDefined(); + expect(models.length).toBe(0); + }); + + it('searchGroupsByNameInChannel - fetch failed', async () => { + await operator.handleGroups({groups: [group], prepareRecordsOnly: false}); + await operator.handleGroupChannelsForChannel({groups: [group], channelId, prepareRecordsOnly: false}); + + mockedRemoteGroups.fetchFilteredChannelGroups.mockReturnValueOnce(Promise.reject(new Error('fail'))); + + const models = await searchGroupsByNameInChannel(serverUrl, group.name, channelId); + expect(models).toBeDefined(); + expect(models.length).toBe(1); + expect(models[0].id).toBe(group.id); + }); +}); diff --git a/app/actions/local/post.test.ts b/app/actions/local/post.test.ts new file mode 100644 index 00000000000..79b221b6ba2 --- /dev/null +++ b/app/actions/local/post.test.ts @@ -0,0 +1,338 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {ActionType, Post} from '@app/constants'; +import {COMBINED_USER_ACTIVITY} from '@app/utils/post_list'; +import {SYSTEM_IDENTIFIERS} from '@constants/database'; +import DatabaseManager from '@database/manager'; +import TestHelper from '@test/test_helper'; + +import { + sendAddToChannelEphemeralPost, + sendEphemeralPost, + removePost, + markPostAsDeleted, + storePostsForChannel, + getPosts, + addPostAcknowledgement, + removePostAcknowledgement, + deletePosts, + getUsersCountFromMentions, +} from './post'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; +import type UserModel from '@typings/database/models/servers/user'; + +const serverUrl = 'baseHandler.test.com'; +let operator: ServerDataOperator; + +let mockGenerateId: jest.Mock; +jest.mock('@utils/general', () => { + const original = jest.requireActual('@utils/general'); + mockGenerateId = jest.fn(() => 'testpostid'); + return { + ...original, + generateId: mockGenerateId, + }; +}); + +const channelId = 'channelid1'; +const user: UserProfile = { + id: 'userid', + username: 'username', + roles: '', +} as UserProfile; + +beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; +}); + +afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); +}); + +describe('sendAddToChannelEphemeralPost', () => { + it('handle not found database', async () => { + const {posts, error} = await sendAddToChannelEphemeralPost('foo', {} as UserModel, ['username2'], ['added username2'], channelId, ''); + expect(posts).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('base case', async () => { + const users = await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + + const {posts, error} = await sendAddToChannelEphemeralPost(serverUrl, users[0], ['username2'], ['added username2'], channelId, ''); + expect(error).toBeUndefined(); + expect(posts).toBeDefined(); + expect(posts?.length).toBe(1); + expect(posts![0].message).toBe('added username2'); + }); +}); + +describe('sendEphemeralPost', () => { + it('handle not found database', async () => { + const {post, error} = await sendEphemeralPost('foo', 'message', channelId, '', user.id); + expect(post).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('handle no channel', async () => { + const {post, error} = await sendEphemeralPost(serverUrl, 'newmessage', '', '', user.id); + expect(post).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('handle no user', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: 'useridcurrent'}], prepareRecordsOnly: false}); + + const {post, error} = await sendEphemeralPost(serverUrl, 'newmessage', channelId, ''); + expect(error).toBeUndefined(); + expect(post).toBeDefined(); + expect(post?.user_id).toBe('useridcurrent'); + }); + + it('base case', async () => { + const {post, error} = await sendEphemeralPost(serverUrl, 'newmessage', channelId, '', user.id); + expect(error).toBeUndefined(); + expect(post).toBeDefined(); + expect(post?.message).toBe('newmessage'); + }); +}); + +describe('removePost', () => { + const post = {...TestHelper.fakePost(channelId), id: 'postid'}; + + it('handle not found database', async () => { + const {post: rPost, error} = await removePost('foo', post); + expect(rPost).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('base case', async () => { + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id], + posts: [post], + prepareRecordsOnly: false, + }); + + const {post: rPost, error} = await removePost(serverUrl, post); + expect(error).toBeUndefined(); + expect(rPost).toBeDefined(); + }); + + it('base case - system message', async () => { + const systemPost = {...TestHelper.fakePost(channelId), id: `${COMBINED_USER_ACTIVITY}id1_id2`, type: Post.POST_TYPES.COMBINED_USER_ACTIVITY as PostType, props: {system_post_ids: ['id1']}}; + + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id, 'id1'], + posts: [systemPost, {...TestHelper.fakePost(channelId), id: 'id1'}], + prepareRecordsOnly: false, + }); + + const {post: rPost, error} = await removePost(serverUrl, systemPost); + expect(error).toBeUndefined(); + expect(rPost).toBeDefined(); + }); +}); + +describe('markPostAsDeleted', () => { + const post = TestHelper.fakePost(channelId); + + it('handle not found database', async () => { + const {model, error} = await markPostAsDeleted('foo', post); + expect(model).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('handle no post', async () => { + const {model, error} = await markPostAsDeleted(serverUrl, post, false); + expect(model).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('base case', async () => { + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id], + posts: [post], + prepareRecordsOnly: false, + }); + + const {model, error} = await markPostAsDeleted(serverUrl, post, false); + expect(error).toBeUndefined(); + expect(model).toBeDefined(); + expect(model?.deleteAt).toBeGreaterThan(0); + }); +}); + +describe('storePostsForChannel', () => { + const post = TestHelper.fakePost(channelId); + post.user_id = user.id; + const teamId = 'tId1'; + const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, + } as Channel; + const channelMember: ChannelMembership = { + id: 'id', + channel_id: channelId, + msg_count: 0, + } as ChannelMembership; + + it('handle not found database', async () => { + const {models, error} = await storePostsForChannel('foo', channelId, [post], [post.id], '', ActionType.POSTS.RECEIVED_IN_CHANNEL, [user], false); + expect(models).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('base case', async () => { + await operator.handleMyChannel({channels: [channel], myChannels: [channelMember], prepareRecordsOnly: false}); + await operator.handleConfigs({ + configs: [ + {id: 'CollapsedThreads', value: 'default_on'}, + {id: 'FeatureFlagCollapsedThreads', value: 'true'}, + ], + configsToDelete: [], + prepareRecordsOnly: false, + }); + + const {models, error} = await storePostsForChannel(serverUrl, channelId, [post], [post.id], '', ActionType.POSTS.RECEIVED_IN_CHANNEL, [user], false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models?.length).toBe(5); // Post, PostsInChannel, User, MyChannel, Thread + }); +}); + +describe('getPosts', () => { + const post = TestHelper.fakePost(channelId); + + it('handle not found database', async () => { + const posts = await getPosts('foo', [post.id]); + expect(posts).toBeDefined(); + expect(posts?.length).toBe(0); + }); + + it('base case', async () => { + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id], + posts: [post], + prepareRecordsOnly: false, + }); + + const posts = await getPosts(serverUrl, [post.id]); + expect(posts).toBeDefined(); + expect(posts.length).toBe(1); + }); +}); + +describe('addPostAcknowledgement', () => { + const post = TestHelper.fakePost(channelId); + + it('handle not found database', async () => { + const {model, error} = await addPostAcknowledgement('foo', post.id, user.id, 123, false); + expect(model).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('handle no post', async () => { + const {model, error} = await addPostAcknowledgement(serverUrl, post.id, user.id, 123, false); + expect(error).toBeDefined(); + expect(model).toBeUndefined(); + }); + + it('handle already acked', async () => { + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id], + posts: [{...post, metadata: {acknowledgements: [{user_id: user.id, post_id: post.id, acknowledged_at: 1}]}}], + prepareRecordsOnly: false, + }); + + const {model, error} = await addPostAcknowledgement(serverUrl, post.id, user.id, 123, false); + expect(error).toBeDefined(); + expect(error).toBe(false); + expect(model).toBeUndefined(); + }); + + it('base case', async () => { + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id], + posts: [post], + prepareRecordsOnly: false, + }); + + const {model, error} = await addPostAcknowledgement(serverUrl, post.id, user.id, 123, false); + expect(error).toBeUndefined(); + expect(model).toBeDefined(); + }); +}); + +describe('removePostAcknowledgement', () => { + const post = TestHelper.fakePost(channelId); + + it('handle not found database', async () => { + const {model, error} = await removePostAcknowledgement('foo', post.id, user.id, false); + expect(model).toBeUndefined(); + expect(error).toBeTruthy(); + }); + + it('handle no post', async () => { + const {model, error} = await removePostAcknowledgement(serverUrl, post.id, user.id, false); + expect(error).toBeDefined(); + expect(model).toBeUndefined(); + }); + + it('base case', async () => { + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id], + posts: [{...post, metadata: {acknowledgements: [{user_id: user.id, post_id: post.id, acknowledged_at: 1}]}}], + prepareRecordsOnly: false, + }); + + const {model, error} = await removePostAcknowledgement(serverUrl, post.id, user.id, false); + expect(error).toBeUndefined(); + expect(model).toBeDefined(); + }); +}); + +describe('deletePosts', () => { + const post = TestHelper.fakePost(channelId); + + it('handle not found database', async () => { + const {error} = await deletePosts('foo', [post.id]); + expect(error).toBeTruthy(); + }); + + it('base case', async () => { + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id], + posts: [post], + prepareRecordsOnly: false, + }); + + const {error} = await deletePosts(serverUrl, [post.id, 'id2']); + expect(error).toBeDefined(); + }); +}); + +describe('getUsersCountFromMentions', () => { + it('handle not found database', async () => { + const num = await getUsersCountFromMentions('foo', []); + expect(num).toBe(0); + }); + + it('base case', async () => { + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + + const num = await getUsersCountFromMentions(serverUrl, [user.username]); + expect(num).toBe(1); + }); +}); diff --git a/app/actions/local/reactions.test.ts b/app/actions/local/reactions.test.ts new file mode 100644 index 00000000000..ff08b5f52eb --- /dev/null +++ b/app/actions/local/reactions.test.ts @@ -0,0 +1,129 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. +import DatabaseManager from '@database/manager'; +import * as recentReactionsQueries from '@queries/servers/system'; +import * as emojiHelpers from '@utils/emoji/helpers'; +import * as logUtils from '@utils/log'; + +import {addRecentReaction} from './reactions'; + +import type ServerDataOperator from '@app/database/operator/server_data_operator'; + +jest.mock('@database/manager'); +jest.mock('@queries/servers/system'); +jest.mock('@utils/emoji/helpers'); +jest.mock('@utils/log'); + +describe('addRecentReaction', () => { + let operator: ServerDataOperator; + const serverUrl = 'baseHandler.test.com'; + + beforeEach(async () => { + jest.clearAllMocks(); + + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + + (recentReactionsQueries.getRecentReactions as jest.Mock).mockResolvedValue([]); + (emojiHelpers.getEmojiFirstAlias as jest.Mock).mockImplementation((emoji) => emoji); + + operator.handleSystem = jest.fn(); + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('should return an empty array if emojiNames is empty', async () => { + const result = await addRecentReaction(serverUrl, []); + expect(result).toEqual([]); + }); + + it('should add new emoji to the beginning of the list', async () => { + (recentReactionsQueries.getRecentReactions as jest.Mock).mockResolvedValue([':water:']); + const emojiNames = [':air:', ':fire:']; + await addRecentReaction(serverUrl, emojiNames); + + expect(operator.handleSystem).toHaveBeenCalledWith({ + systems: [{ + id: 'recentReactions', + value: JSON.stringify([':fire:', ':air:', ':water:']), + }], + prepareRecordsOnly: false, + }); + }); + + it('should move existing emoji to the beginning of the list', async () => { + (recentReactionsQueries.getRecentReactions as jest.Mock).mockResolvedValue([':water:', ':fire:']); + const emojiNames = [':air:', ':fire:']; + await addRecentReaction(serverUrl, emojiNames); + + expect(operator.handleSystem).toHaveBeenCalledWith({ + systems: [{ + id: 'recentReactions', + value: JSON.stringify([':fire:', ':air:', ':water:']), + }], + prepareRecordsOnly: false, + }); + }); + + it('should limit the list to MAXIMUM_RECENT_EMOJI', async () => { + const longEmojiList = Array.from({length: 40}, (_, i) => `emoji${i}`); + (recentReactionsQueries.getRecentReactions as jest.Mock).mockResolvedValue(longEmojiList); + await addRecentReaction(serverUrl, ['newEmoji']); + + const handleSystemCall = (operator.handleSystem as jest.Mock).mock.calls[0][0]; + const savedEmojis = JSON.parse(handleSystemCall.systems[0].value); + expect(savedEmojis.length).toBe(27); + expect(savedEmojis[0]).toBe('newEmoji'); + }); + + it('should use getEmojiFirstAlias for each emoji', async () => { + (emojiHelpers.getEmojiFirstAlias as jest.Mock).mockImplementation((emoji) => { + if (emoji === ':air:') { + return ':wind:'; + } + if (emoji === ':fire:') { + return ':flame:'; + } + return emoji; + }); + + const emojiNames = [':air:', ':fire:']; + await addRecentReaction(serverUrl, emojiNames); + + expect(emojiHelpers.getEmojiFirstAlias).toHaveBeenCalledTimes(2); + expect(emojiHelpers.getEmojiFirstAlias).toHaveBeenCalledWith(':air:'); + expect(emojiHelpers.getEmojiFirstAlias).toHaveBeenCalledWith(':fire:'); + expect(operator.handleSystem).toHaveBeenCalledWith({ + systems: [{ + id: 'recentReactions', + value: JSON.stringify([':flame:', ':wind:']), + }], + prepareRecordsOnly: false, + }); + }); + + it('should handle errors and log them', async () => { + const unregisteredServerUrl = 'unregistered.test.com'; + const failedError = new Error(`${unregisteredServerUrl} database not found`); + + const result = await addRecentReaction(unregisteredServerUrl, [':air:']); + + expect(logUtils.logError).toHaveBeenCalledWith('Failed addRecentReaction', failedError); + expect(result).toEqual({error: failedError}); + }); + + it('should handle prepareRecordsOnly=true flag', async () => { + const emojiNames = [':air:']; + await addRecentReaction(serverUrl, emojiNames, true); + + expect(operator.handleSystem).toHaveBeenCalledWith({ + systems: [{ + id: 'recentReactions', + value: JSON.stringify([':air:']), + }], + prepareRecordsOnly: true, + }); + }); +}); diff --git a/app/actions/local/systems.test.ts b/app/actions/local/systems.test.ts new file mode 100644 index 00000000000..6ac807916de --- /dev/null +++ b/app/actions/local/systems.test.ts @@ -0,0 +1,174 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import Database from '@nozbe/watermelondb/Database'; + +import {ActionType} from '@app/constants'; +import {SYSTEM_IDENTIFIERS} from '@app/constants/database'; +import DatabaseManager from '@database/manager'; +import TestHelper from '@test/test_helper'; + +import { + storeConfig, + storeConfigAndLicense, + storeDataRetentionPolicies, + updateLastDataRetentionRun, + dataRetentionCleanup, + setLastServerVersionCheck, + setGlobalThreadsTab, + dismissAnnouncement, +} from './systems'; + +import type {DataRetentionPoliciesRequest} from '@actions/remote/systems'; +import type ServerDataOperator from '@database/operator/server_data_operator'; +import type SystemModel from '@typings/database/models/servers/system'; + +const serverUrl = 'baseHandler.test.com'; +let operator: ServerDataOperator; + +jest.mock('@init/credentials', () => { + const original = jest.requireActual('@init/credentials'); + return { + ...original, + getServerCredentials: jest.fn(async (url: string) => ({serverUrl: url})), + }; +}); + +beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; +}); + +afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); +}); + +describe('storeConfigAndLicense', () => { + it('handle not found database - storeConfig', async () => { + const models = await storeConfig('foo', {} as ClientConfig); + expect(models).toBeDefined(); + expect(models.length).toBe(0); + }); + + it('handle not found database', async () => { + const models = await storeConfigAndLicense('foo', {} as ClientConfig, {} as ClientLicense); + expect(models).toBeDefined(); + expect(models.length).toBe(0); + }); + + it('base case', async () => { + const models = await storeConfigAndLicense(serverUrl, {AboutLink: 'link'} as ClientConfig, {Announcement: 'test'} as ClientLicense); + expect(models).toBeDefined(); + expect(models.length).toBe(1); // config + }); +}); + +describe('dataRetention', () => { + it('handle not found database - storeDataRetentionPolicies', async () => { + const models = await storeDataRetentionPolicies('foo', {} as DataRetentionPoliciesRequest); + expect(models).toBeDefined(); + expect(models.length).toBe(0); + }); + + it('base case - storeDataRetentionPolicies', async () => { + const models = await storeDataRetentionPolicies(serverUrl, {globalPolicy: {} as GlobalDataRetentionPolicy, teamPolicies: [], channelPolicies: []} as DataRetentionPoliciesRequest); + expect(models).toBeDefined(); + expect(models.length).toBe(2); // data retention and granular data retention policies + }); + + it('handle not found database - updateLastDataRetentionRun', async () => { + const {error} = await updateLastDataRetentionRun('foo', 0) as {error: unknown}; + expect(error).toBeDefined(); + }); + + it('base case - updateLastDataRetentionRun', async () => { + const models = await updateLastDataRetentionRun(serverUrl, 10) as SystemModel[]; + expect(models).toBeDefined(); + expect(models.length).toBe(1); // data retention + }); + + it('handle not found database - dataRetentionCleanup', async () => { + const {error} = await dataRetentionCleanup('foo'); + expect(error).toBeDefined(); + }); + + it('rentention off - dataRetentionCleanup', async () => { + const post = {...TestHelper.fakePost('channelid1'), id: 'postid', create_at: 1}; + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id], + posts: [post], + prepareRecordsOnly: false, + }); + + const spy = jest.spyOn(Database.prototype, 'unsafeVacuum').mockImplementation(jest.fn()); + const {error} = await dataRetentionCleanup(serverUrl); + expect(error).toBeDefined(); // unsafeExecute loki error + spy.mockRestore(); + }); + + it('retention on - dataRetentionCleanup', async () => { + const channel: Channel = { + id: 'channelid1', + team_id: 'teamid1', + total_msg_count: 0, + } as Channel; + + await operator.handleConfigs({ + configs: [ + {id: 'DataRetentionEnableMessageDeletion', value: 'true'}, + ], + configsToDelete: [], + prepareRecordsOnly: false, + }); + await operator.handleSystem({systems: + [ + {id: SYSTEM_IDENTIFIERS.LICENSE, value: {IsLicensed: 'true', DataRetention: 'true'}}, + {id: SYSTEM_IDENTIFIERS.GRANULAR_DATA_RETENTION_POLICIES, value: {team: [{team_id: 'teamid1', post_duration: 100}], channel: [{channel_id: 'channelid1', post_duration: 100}]}}, + ], + prepareRecordsOnly: false}); + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + + const spy = jest.spyOn(Database.prototype, 'unsafeVacuum').mockImplementation(jest.fn()); + const {error} = await dataRetentionCleanup(serverUrl); + expect(error).toBeDefined(); // LokiJSAdapter doesn't support unsafeSqlQuery + spy.mockRestore(); + }); +}); + +describe('setLastServerVersionCheck', () => { + it('handle not found database', async () => { + const {error} = await setLastServerVersionCheck('foo'); + expect(error).toBeDefined(); + }); + + it('base case', async () => { + const {error} = await setLastServerVersionCheck(serverUrl); + expect(error).toBeUndefined(); + }); +}); + +describe('setGlobalThreadsTab', () => { + it('handle not found database', async () => { + const {error} = await setGlobalThreadsTab('foo', 'all'); + expect(error).toBeDefined(); + }); + + it('base case', async () => { + const {error} = await setGlobalThreadsTab(serverUrl, 'all'); + expect(error).toBeUndefined(); + }); +}); + +describe('dismissAnnouncement', () => { + it('handle not found database', async () => { + const {error} = await dismissAnnouncement('foo', 'text'); + expect(error).toBeDefined(); + }); + + it('base case', async () => { + const {error} = await dismissAnnouncement(serverUrl, 'text'); + expect(error).toBeUndefined(); + }); +}); + diff --git a/app/actions/local/systems.ts b/app/actions/local/systems.ts index 3dd0a20da3d..ff3707a3662 100644 --- a/app/actions/local/systems.ts +++ b/app/actions/local/systems.ts @@ -38,11 +38,12 @@ export async function storeConfigAndLicense(serverUrl: string, config: ClientCon await operator.handleSystem({systems, prepareRecordsOnly: false}); } - await storeConfig(serverUrl, config); + return await storeConfig(serverUrl, config); } } catch (error) { logError('An error occurred while saving config & license', error); } + return []; } export async function storeConfig(serverUrl: string, config: ClientConfig | undefined, prepareRecordsOnly = false) { @@ -274,8 +275,10 @@ export async function setLastServerVersionCheck(serverUrl: string, reset = false }], prepareRecordsOnly: false, }); + return {error: undefined}; } catch (error) { logError('setLastServerVersionCheck', error); + return {error}; } } @@ -289,8 +292,10 @@ export async function setGlobalThreadsTab(serverUrl: string, globalThreadsTab: G }], prepareRecordsOnly: false, }); + return {error: undefined}; } catch (error) { logError('setGlobalThreadsTab', error); + return {error}; } } @@ -298,7 +303,9 @@ export async function dismissAnnouncement(serverUrl: string, announcementText: s try { const {operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.LAST_DISMISSED_BANNER, value: announcementText}], prepareRecordsOnly: false}); + return {error: undefined}; } catch (error) { logError('An error occurred while dismissing an announcement', error); + return {error}; } } diff --git a/app/actions/local/team.test.ts b/app/actions/local/team.test.ts new file mode 100644 index 00000000000..3790cd2cfdd --- /dev/null +++ b/app/actions/local/team.test.ts @@ -0,0 +1,400 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. +import ServerDataOperator from '@app/database/operator/server_data_operator'; +import DatabaseManager from '@database/manager'; +import {getMyTeamById, getTeamById, getTeamSearchHistoryById, prepareDeleteTeam, removeTeamFromTeamHistory} from '@queries/servers/team'; +import {logError} from '@utils/log'; + +import {queryTeamSearchHistoryByTeamId} from '../../queries/servers/team'; + +import {addSearchToTeamSearchHistory, removeSearchFromTeamSearchHistory, removeUserFromTeam, MAX_TEAM_SEARCHES} from './team'; + +jest.mock('@database/manager'); +jest.mock('@queries/servers/team'); +jest.mock('@utils/log'); + +let operator: ServerDataOperator; +const serverUrl = 'baseHandler.test.com'; +const teamId = 'teamId123'; +const database = { + write: jest.fn(async (callback) => callback()), +}; + +describe('removeSearchFromTeamSearchHistory', () => { + const searchId = 'searchId123'; + + beforeEach(async () => { + jest.clearAllMocks(); + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + DatabaseManager.getServerDatabaseAndOperator = jest.fn(); + (DatabaseManager.getServerDatabaseAndOperator as jest.Mock).mockReturnValue({ + database, + operator, + }); + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('should remove search from team search history successfully', async () => { + const teamSearch = { + destroyPermanently: jest.fn(), + }; + (getTeamSearchHistoryById as jest.Mock).mockResolvedValue(teamSearch); + + const result = await removeSearchFromTeamSearchHistory(serverUrl, searchId); + + expect(getTeamSearchHistoryById).toHaveBeenCalledWith(database, searchId); + expect(database.write).toHaveBeenCalledWith(expect.any(Function)); + expect(database.write).toHaveBeenCalledTimes(1); + expect(teamSearch.destroyPermanently).toHaveBeenCalledTimes(1); + expect(result).toEqual({teamSearch}); + }); + + it('should handle case when team search history is not found', async () => { + (getTeamSearchHistoryById as jest.Mock).mockResolvedValue(undefined); + + const result = await removeSearchFromTeamSearchHistory(serverUrl, searchId); + + expect(getTeamSearchHistoryById).toHaveBeenCalledWith(database, searchId); + expect(database.write).not.toHaveBeenCalled(); + expect(result).toEqual({teamSearch: undefined}); + }); + + it('should handle errors and log them', async () => { + const error = new Error('Test error'); + (getTeamSearchHistoryById as jest.Mock).mockRejectedValue(error); + + const result = await removeSearchFromTeamSearchHistory(serverUrl, searchId); + + expect(getTeamSearchHistoryById).toHaveBeenCalledWith(database, searchId); + expect(logError).toHaveBeenCalledWith('Failed removeSearchFromTeamSearchHistory', error); + expect(result).toEqual({error}); + }); + + it('should handle database write errors', async () => { + const teamSearch = { + destroyPermanently: jest.fn(), + }; + const writeError = new Error('Database write error'); + (getTeamSearchHistoryById as jest.Mock).mockResolvedValue(teamSearch); + (database.write as jest.Mock).mockRejectedValue(writeError); + + const result = await removeSearchFromTeamSearchHistory(serverUrl, searchId); + + expect(getTeamSearchHistoryById).toHaveBeenCalledWith(database, searchId); + expect(database.write).toHaveBeenCalledWith(expect.any(Function)); + expect(logError).toHaveBeenCalledWith('Failed removeSearchFromTeamSearchHistory', writeError); + expect(result).toEqual({error: writeError}); + }); +}); + +describe('removeUserFromTeam', () => { + beforeEach(async () => { + jest.clearAllMocks(); + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + DatabaseManager.getServerDatabaseAndOperator = jest.fn(); + (DatabaseManager.getServerDatabaseAndOperator as jest.Mock).mockReturnValue({ + database, + operator, + }); + + operator.batchRecords = jest.fn(); + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('should remove user from team successfully', async () => { + const myTeam = {id: 'myTeamId'}; + const team = {id: 'myTeamId'}; + const preparedModels = [ + {id: 'model1', _preparedState: 'markAsDeleted'}, + {id: 'model2', _preparedState: 'markAsDeleted'}, + ]; + const systemModels = [ + {id: 'systemModel1', _preparedState: 'update', value: []}, + ]; + + (getMyTeamById as jest.Mock).mockResolvedValue(myTeam); + (getTeamById as jest.Mock).mockResolvedValue(team); + (prepareDeleteTeam as jest.Mock).mockResolvedValue(preparedModels); + (removeTeamFromTeamHistory as jest.Mock).mockResolvedValue(systemModels); + + const result = await removeUserFromTeam(serverUrl, team.id); + + expect(getMyTeamById).toHaveBeenCalledWith(database, team.id); + expect(getTeamById).toHaveBeenCalledWith(database, myTeam.id); + expect(prepareDeleteTeam).toHaveBeenCalledWith(team); + expect(removeTeamFromTeamHistory).toHaveBeenCalledWith(operator, team.id, true); + expect(operator.batchRecords).toHaveBeenCalledWith(preparedModels, 'removeUserFromTeam'); + + // Verify team id is not present + systemModels.forEach((model) => { + expect(model.value).not.toContain(team.id); + }); + + // Check if preparedModels contain systemModels + expect(preparedModels).toEqual(expect.arrayContaining(systemModels)); + + expect(result).toEqual({error: undefined}); + }); + + it('should handle errors during database write', async () => { + const myTeam = {id: 'myTeamId'}; + const team = {id: 'teamId'}; + const preparedModels = [ + {id: 'model1', _preparedState: 'markAsDeleted'}, + {id: 'model2', _preparedState: 'markAsDeleted'}, + ]; + const systemModels = [ + {id: 'systemModel1', _preparedState: 'update', value: [team.id]}, + ]; + const writeError = new Error('Database write error'); + + (getMyTeamById as jest.Mock).mockResolvedValue(myTeam); + (getTeamById as jest.Mock).mockResolvedValue(team); + (prepareDeleteTeam as jest.Mock).mockResolvedValue(preparedModels); + (removeTeamFromTeamHistory as jest.Mock).mockResolvedValue(systemModels); + (operator.batchRecords as jest.Mock).mockRejectedValue(writeError); + + const result = await removeUserFromTeam(serverUrl, teamId); + + expect(getMyTeamById).toHaveBeenCalledWith(database, teamId); + expect(getTeamById).toHaveBeenCalledWith(database, myTeam.id); + expect(prepareDeleteTeam).toHaveBeenCalledWith(team); + expect(removeTeamFromTeamHistory).toHaveBeenCalledWith(operator, team.id, true); + expect(operator.batchRecords).toHaveBeenCalledWith(preparedModels, 'removeUserFromTeam'); + expect(logError).toHaveBeenCalledWith('Failed removeUserFromTeam', writeError); + + // Verify team id is present + systemModels.forEach((model) => { + expect(model.value).toContain(team.id); + }); + + // Check if preparedModels contain systemModels + expect(preparedModels).toEqual(expect.arrayContaining(systemModels)); + + expect(result).toEqual({error: writeError}); + }); + + it('should handle case when myTeam is not found', async () => { + (getMyTeamById as jest.Mock).mockResolvedValue(null); + + const result = await removeUserFromTeam(serverUrl, teamId); + + expect(getMyTeamById).toHaveBeenCalledWith(database, teamId); + expect(getTeamById).not.toHaveBeenCalled(); + expect(prepareDeleteTeam).not.toHaveBeenCalled(); + expect(removeTeamFromTeamHistory).not.toHaveBeenCalled(); + expect(operator.batchRecords).not.toHaveBeenCalled(); + expect(result).toEqual({error: undefined}); + }); + + it('should handle case when team is not found', async () => { + const myTeam = {id: 'myTeamId'}; + + (getMyTeamById as jest.Mock).mockResolvedValue(myTeam); + (getTeamById as jest.Mock).mockResolvedValue(null); + + const result = await removeUserFromTeam(serverUrl, teamId); + + expect(getMyTeamById).toHaveBeenCalledWith(database, teamId); + expect(getTeamById).toHaveBeenCalledWith(database, myTeam.id); + expect(result.error).toEqual(new Error('Team not found')); + }); + + it('should handle errors and log them', async () => { + const error = new Error('Test error'); + (DatabaseManager.getServerDatabaseAndOperator as jest.Mock).mockImplementation(() => { + throw error; + }); + + const result = await removeUserFromTeam(serverUrl, teamId); + + expect(DatabaseManager.getServerDatabaseAndOperator).toHaveBeenCalled(); + expect(logError).toHaveBeenCalledWith('Failed removeUserFromTeam', error); + expect(result).toEqual({error}); + }); + + it('should handle when removeTeamFromTeamHistory returns undefined or empty array', async () => { + const myTeam = {id: 'myTeamId'}; + const team = {id: 'teamId'}; + const preparedModels = [ + {id: 'model1', _preparedState: 'markAsDeleted'}, + {id: 'model2', _preparedState: 'markAsDeleted'}, + ]; + + (getMyTeamById as jest.Mock).mockResolvedValue(myTeam); + (getTeamById as jest.Mock).mockResolvedValue(team); + (prepareDeleteTeam as jest.Mock).mockResolvedValue(preparedModels); + (removeTeamFromTeamHistory as jest.Mock).mockResolvedValue(undefined); + + const result = await removeUserFromTeam(serverUrl, teamId); + + expect(getMyTeamById).toHaveBeenCalledWith(database, teamId); + expect(getTeamById).toHaveBeenCalledWith(database, myTeam.id); + expect(prepareDeleteTeam).toHaveBeenCalledWith(team); + expect(removeTeamFromTeamHistory).toHaveBeenCalledWith(operator, team.id, true); + expect(operator.batchRecords).toHaveBeenCalledWith(preparedModels, 'removeUserFromTeam'); + expect(result).toEqual({error: undefined}); + }); + + it('should handle when models length is 0', async () => { + const myTeam = {id: 'myTeamId'}; + const team = {id: 'teamId'}; + const models: never[] = []; + + (getMyTeamById as jest.Mock).mockResolvedValue(myTeam); + (getTeamById as jest.Mock).mockResolvedValue(team); + (prepareDeleteTeam as jest.Mock).mockResolvedValue([]); + (removeTeamFromTeamHistory as jest.Mock).mockResolvedValue(models); + + const result = await removeUserFromTeam(serverUrl, teamId); + + expect(getMyTeamById).toHaveBeenCalledWith(database, teamId); + expect(getTeamById).toHaveBeenCalledWith(database, myTeam.id); + expect(prepareDeleteTeam).toHaveBeenCalledWith(team); + expect(removeTeamFromTeamHistory).toHaveBeenCalledWith(operator, team.id, true); + expect(operator.batchRecords).not.toHaveBeenCalled(); + expect(result).toEqual({error: undefined}); + }); +}); + +describe('addSearchToTeamSearchHistory', () => { + const terms = 'search terms'; + + beforeEach(async () => { + jest.clearAllMocks(); + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; + DatabaseManager.getServerDatabaseAndOperator = jest.fn(); + (DatabaseManager.getServerDatabaseAndOperator as jest.Mock).mockReturnValue({ + database, + operator, + }); + + operator.handleTeamSearchHistory = jest.fn(); + operator.batchRecords = jest.fn(); + jest.spyOn(Date, 'now').mockImplementation(() => 1724657520366); + }); + + afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); + }); + + it('should add search to team search history successfully', async () => { + const newSearch = { + created_at: Date.now(), + display_term: terms, + term: terms, + team_id: teamId, + }; + const searchModel = {id: 'searchModelId', _raw: {_changed: 'created_at'}}; + (operator.handleTeamSearchHistory as jest.Mock).mockResolvedValue([searchModel]); + + const result = await addSearchToTeamSearchHistory(serverUrl, teamId, terms); + + expect(operator.handleTeamSearchHistory).toHaveBeenCalledWith({ + teamSearchHistories: [newSearch], + prepareRecordsOnly: true, + }); + expect(operator.batchRecords).toHaveBeenCalledWith([searchModel], 'addSearchToTeamHistory'); + expect(result).toEqual({searchModel}); + }); + + it('should delete the oldest entry if team search history exceeds the limit', async () => { + const newSearch = { + created_at: Date.now(), + display_term: terms, + term: terms, + team_id: teamId, + }; + const searchModel = {id: 'searchModelId', _raw: {_changed: ''}}; + const oldSearchModel = {id: 'oldSearchModelId', prepareDestroyPermanently: jest.fn().mockReturnValue(undefined)}; + const teamSearchHistory = new Array(MAX_TEAM_SEARCHES + 1).fill(oldSearchModel); + + (operator.handleTeamSearchHistory as jest.Mock).mockResolvedValue([searchModel]); + (queryTeamSearchHistoryByTeamId as jest.Mock).mockReturnValue({ + fetch: jest.fn().mockResolvedValue(teamSearchHistory), + }); + + const result = await addSearchToTeamSearchHistory(serverUrl, teamId, terms); + + expect(operator.handleTeamSearchHistory).toHaveBeenCalledWith({ + teamSearchHistories: [newSearch], + prepareRecordsOnly: true, + }); + expect(queryTeamSearchHistoryByTeamId).toHaveBeenCalledWith(database, teamId); + expect(oldSearchModel.prepareDestroyPermanently).toHaveBeenCalledTimes(1); + expect(operator.batchRecords).toHaveBeenCalledWith([searchModel], 'addSearchToTeamHistory'); + expect(result).toEqual({searchModel}); + }); + + it('should handle case when searchModel._raw._changed is "created_at"', async () => { + const newSearch = { + created_at: Date.now(), + display_term: terms, + term: terms, + team_id: teamId, + }; + const searchModel = {id: 'searchModelId', _raw: {_changed: 'created_at'}}; + (operator.handleTeamSearchHistory as jest.Mock).mockResolvedValue([searchModel]); + + const result = await addSearchToTeamSearchHistory(serverUrl, teamId, terms); + + expect(operator.handleTeamSearchHistory).toHaveBeenCalledWith({ + teamSearchHistories: [newSearch], + prepareRecordsOnly: true, + }); + expect(queryTeamSearchHistoryByTeamId).not.toHaveBeenCalled(); + expect(operator.batchRecords).toHaveBeenCalledWith([searchModel], 'addSearchToTeamHistory'); + expect(result).toEqual({searchModel}); + }); + + it('should handle case when teamSearchHistory length is less than or equal to MAX_TEAM_SEARCHES', async () => { + const newSearch = { + created_at: Date.now(), + display_term: terms, + term: terms, + team_id: teamId, + }; + const searchModel = {id: 'searchModelId', _raw: {_changed: ''}}; + const oldSearchModel = {id: 'oldSearchModelId', prepareDestroyPermanently: jest.fn().mockReturnValue(undefined)}; + const teamSearchHistory = new Array(MAX_TEAM_SEARCHES).fill(searchModel); + + (operator.handleTeamSearchHistory as jest.Mock).mockResolvedValue([searchModel]); + (queryTeamSearchHistoryByTeamId as jest.Mock).mockReturnValue({ + fetch: jest.fn().mockResolvedValue(teamSearchHistory), + }); + + const result = await addSearchToTeamSearchHistory(serverUrl, teamId, terms); + + expect(operator.handleTeamSearchHistory).toHaveBeenCalledWith({ + teamSearchHistories: [newSearch], + prepareRecordsOnly: true, + }); + expect(queryTeamSearchHistoryByTeamId).toHaveBeenCalledWith(database, teamId); + expect(operator.batchRecords).toHaveBeenCalledWith([searchModel], 'addSearchToTeamHistory'); + expect(result).toEqual({searchModel}); + expect(oldSearchModel.prepareDestroyPermanently).not.toHaveBeenCalled(); + }); + + it('should handle errors and log them', async () => { + const error = new Error('Test error'); + (operator.handleTeamSearchHistory as jest.Mock).mockRejectedValue(error); + + const result = await addSearchToTeamSearchHistory(serverUrl, teamId, terms); + + expect(operator.handleTeamSearchHistory).toHaveBeenCalledWith({ + teamSearchHistories: [{created_at: expect.any(Number), display_term: terms, term: terms, team_id: teamId}], + prepareRecordsOnly: true, + }); + expect(logError).toHaveBeenCalledWith('Failed addSearchToTeamSearchHistory', error); + expect(result).toEqual({error}); + }); +}); diff --git a/app/actions/local/team.ts b/app/actions/local/team.ts index bfcd8ae5bd6..c620e140a30 100644 --- a/app/actions/local/team.ts +++ b/app/actions/local/team.ts @@ -7,6 +7,8 @@ import {logError} from '@utils/log'; import type Model from '@nozbe/watermelondb/Model'; +export const MAX_TEAM_SEARCHES = 15; + export async function removeUserFromTeam(serverUrl: string, teamId: string) { try { const {database, operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); @@ -34,7 +36,6 @@ export async function removeUserFromTeam(serverUrl: string, teamId: string) { } export async function addSearchToTeamSearchHistory(serverUrl: string, teamId: string, terms: string) { - const MAX_TEAM_SEARCHES = 15; try { const {database, operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); const newSearch: TeamSearchHistory = { diff --git a/app/actions/local/thread.test.ts b/app/actions/local/thread.test.ts new file mode 100644 index 00000000000..a8c44d5510e --- /dev/null +++ b/app/actions/local/thread.test.ts @@ -0,0 +1,296 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {ActionType} from '@app/constants'; +import {SYSTEM_IDENTIFIERS} from '@constants/database'; +import Preferences from '@constants/preferences'; +import DatabaseManager from '@database/manager'; +import EphemeralStore from '@store/ephemeral_store'; +import TestHelper from '@test/test_helper'; + +import { + switchToGlobalThreads, + switchToThread, + createThreadFromNewPost, + processReceivedThreads, + markTeamThreadsAsRead, + markThreadAsViewed, + updateThread, + updateTeamThreadsSync, +} from './thread'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; + +const serverUrl = 'baseHandler.test.com'; +let operator: ServerDataOperator; + +beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; +}); + +afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); +}); + +jest.mock('@store/navigation_store', () => { + const original = jest.requireActual('@store/navigation_store'); + return { + ...original, + waitUntilScreenIsTop: jest.fn(() => Promise.resolve()), + }; +}); + +const teamId = 'tId1'; +const team: Team = { + id: teamId, +} as Team; +const channelId = 'channelid1'; +const channel: Channel = { + id: channelId, + team_id: teamId, + total_msg_count: 0, +} as Channel; +const user: UserProfile = { + id: 'userid', + username: 'username', + roles: '', +} as UserProfile; +const user2: UserProfile = { + id: 'userid2', + username: 'username2', + first_name: 'first', + last_name: 'last', + roles: '', +} as UserProfile; + +const rootPost = {...TestHelper.fakePost(channelId, user.id), id: 'rootpostid', create_at: 1}; +const threads = [ + { + id: rootPost.id, + reply_count: 0, + last_reply_at: 123, + last_viewed_at: 123, + participants: [{ + id: user.id, + }], + is_following: true, + unread_replies: 0, + unread_mentions: 0, + lastFetchedAt: 0, + }, +] as ThreadWithLastFetchedAt[]; + +describe('switchToGlobalThreads', () => { + it('handle not found database', async () => { + const {models, error} = await switchToGlobalThreads('foo', undefined, false); + expect(models).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('handle no team', async () => { + const {models, error} = await switchToGlobalThreads(serverUrl, undefined, false); + expect(models).toBeUndefined(); + expect(error).toBeDefined(); + expect((error as Error).message).toBe('no team to switch to'); + }); + + it('base case', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + + const {models, error} = await switchToGlobalThreads(serverUrl, undefined, false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models?.length).toBe(1); // history + }); +}); + +describe('switchToThread', () => { + it('handle not found database', async () => { + const {error} = await switchToThread('foo', '', false); + expect(error).toBeDefined(); + }); + + it('handle no user', async () => { + const {error} = await switchToThread(serverUrl, '', false); + expect((error as Error).message).toBe('User not found'); + }); + + it('handle no post', async () => { + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + + const {error} = await switchToThread(serverUrl, '', false); + expect((error as Error).message).toBe('Post not found'); + }); + + it('handle no channel', async () => { + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + const post = {...TestHelper.fakePost(channelId, user2.id), id: 'postid', create_at: 1}; + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id], + posts: [post], + prepareRecordsOnly: false, + }); + + const {error} = await switchToThread(serverUrl, post.id, false); + expect((error as Error).message).toBe('Channel not found'); + }); + + it('base case', async () => { + EphemeralStore.theme = Preferences.THEMES.denim; + await operator.handleUsers({users: [user, user2], prepareRecordsOnly: false}); + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: 'teamid2'}, {id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + await operator.handleChannel({channels: [channel], prepareRecordsOnly: false}); + const post = {...TestHelper.fakePost(channelId, user2.id), id: 'postid', create_at: 1}; + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_IN_CHANNEL, + order: [post.id], + posts: [post], + prepareRecordsOnly: false, + }); + + const {error} = await switchToThread(serverUrl, post.id, true); + expect(error).toBeUndefined(); + }); +}); + +describe('createThreadFromNewPost', () => { + it('handle not found database', async () => { + const {models, error} = await createThreadFromNewPost('foo', {} as Post, false); + expect(models).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('base case', async () => { + await operator.handleUsers({users: [user, user2], prepareRecordsOnly: false}); + await operator.handleThreads({threads, prepareRecordsOnly: false, teamId: team.id}); + const post = {...TestHelper.fakePost(channelId, user2.id), id: 'postid', create_at: 1, root_id: rootPost.id}; + + const {models, error} = await createThreadFromNewPost(serverUrl, post, false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models?.length).toBe(2); // thread, thread participant + }); + + it('base case - no root post', async () => { + await operator.handleUsers({users: [user2], prepareRecordsOnly: false}); + const post = {...TestHelper.fakePost(channelId, user2.id), id: 'postid', create_at: 1}; + + const {models, error} = await createThreadFromNewPost(serverUrl, post, false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models?.length).toBe(1); // thread + }); +}); + +describe('processReceivedThreads', () => { + it('handle not found database', async () => { + const {models, error} = await processReceivedThreads('foo', [], '', false); + expect(models).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('base case', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + const thread = [ + { + id: rootPost.id, + reply_count: 0, + last_reply_at: 123, + last_viewed_at: 123, + participants: [{ + id: user.id, + }], + is_following: true, + unread_replies: 0, + unread_mentions: 0, + post: rootPost, + }, + ] as Thread[]; + + const {models, error} = await processReceivedThreads(serverUrl, thread, team.id, false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models?.length).toBe(4); // post, thread, thread participant, thread in team + }); +}); + +describe('markTeamThreadsAsRead', () => { + it('handle not found database', async () => { + const {models, error} = await markTeamThreadsAsRead('foo', '', false); + expect(models).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('base case', async () => { + const {models, error} = await markTeamThreadsAsRead(serverUrl, team.id, false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + expect(models?.length).toBe(0); + }); +}); + +describe('markThreadAsViewed', () => { + it('handle not found database', async () => { + const {model, error} = await markThreadAsViewed('foo', '', false); + expect(model).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('handle no thread', async () => { + const {model, error} = await markThreadAsViewed(serverUrl, '', false); + expect(model).toBeUndefined(); + expect(error).toBeDefined(); + expect(error).toBe('Thread not found'); + }); + + it('base case', async () => { + await operator.handleThreads({threads, prepareRecordsOnly: false, teamId: team.id}); + const {model, error} = await markThreadAsViewed(serverUrl, rootPost.id, false); + expect(error).toBeUndefined(); + expect(model).toBeDefined(); + }); +}); + +describe('updateThread', () => { + it('handle not found database', async () => { + const {model, error} = await updateThread('foo', '', {}, false); + expect(model).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('handle no thread', async () => { + const {model, error} = await updateThread(serverUrl, '', {}, false); + expect(model).toBeUndefined(); + expect(error).toBeDefined(); + expect((error as Error).message).toBe('Thread not found'); + }); + + it('base case', async () => { + await operator.handleThreads({threads, prepareRecordsOnly: false, teamId: team.id}); + const {model, error} = await updateThread(serverUrl, rootPost.id, threads[0], false); + expect(error).toBeUndefined(); + expect(model).toBeDefined(); + }); +}); + +describe('updateTeamThreadsSync', () => { + it('handle not found database', async () => { + const {models, error} = await updateTeamThreadsSync('foo', {} as TeamThreadsSync, false); + expect(models).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('base case', async () => { + const {models, error} = await updateTeamThreadsSync(serverUrl, {id: 'id1', earliest: 1, latest: 2}, false); + expect(error).toBeUndefined(); + expect(models).toBeDefined(); + }); +}); diff --git a/app/actions/local/user.test.ts b/app/actions/local/user.test.ts new file mode 100644 index 00000000000..bb0cca55847 --- /dev/null +++ b/app/actions/local/user.test.ts @@ -0,0 +1,131 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {SYSTEM_IDENTIFIERS} from '@app/constants/database'; +import DatabaseManager from '@database/manager'; + +import { + setCurrentUserStatus, + updateLocalCustomStatus, + updateRecentCustomStatuses, + updateLocalUser, + storeProfile, +} from './user'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; +import type SystemModel from '@typings/database/models/servers/system'; +import type UserModel from '@typings/database/models/servers/user'; + +const serverUrl = 'baseHandler.test.com'; +let operator: ServerDataOperator; + +jest.mock('@init/credentials', () => { + const original = jest.requireActual('@init/credentials'); + return { + ...original, + getServerCredentials: jest.fn(async (url: string) => ({serverUrl: url})), + }; +}); + +const user: UserProfile = { + id: 'userid', + username: 'username', + roles: '', +} as UserProfile; + +beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; +}); + +afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); +}); + +describe('setCurrentUserStatus', () => { + it('handle not found database', async () => { + const result = await setCurrentUserStatus('foo', '') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('handle no user', async () => { + const result = await setCurrentUserStatus(serverUrl, '') as {error: unknown}; + expect(result?.error).toBeDefined(); + expect((result?.error as Error).message).toBe(`No current user for ${serverUrl}`); + }); + + it('base case', async () => { + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + const result = await setCurrentUserStatus(serverUrl, 'away'); + expect(result).toBeNull(); + }); +}); + +describe('updateLocalCustomStatus', () => { + it('handle not found database', async () => { + const result = await updateLocalCustomStatus('foo', {} as UserModel) as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('base case', async () => { + const userModels = await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + const result = await updateLocalCustomStatus(serverUrl, userModels[0], {text: 'customstatus'}) as {}; + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); +}); + +describe('updateRecentCustomStatuses', () => { + it('handle not found database', async () => { + const result = await updateRecentCustomStatuses('foo', {text: 'customstatus'}) as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('base case', async () => { + const result = await updateRecentCustomStatuses(serverUrl, {text: 'customstatus'}) as SystemModel[]; + expect(result).toBeDefined(); + expect(result.length).toBe(1); // system + }); +}); + +describe('updateLocalUser', () => { + it('handle not found database', async () => { + const {error} = await updateLocalUser('foo', user); + expect(error).toBeDefined(); + }); + + it('base case', async () => { + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + const {user: userModel} = await updateLocalUser(serverUrl, user); + expect(userModel).toBeDefined(); + }); + + it('base case with user id', async () => { + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + const {user: userModel} = await updateLocalUser(serverUrl, {status: 'away'}, user.id); + expect(userModel).toBeDefined(); + }); +}); + +describe('storeProfile', () => { + it('handle not found database', async () => { + const {error} = await storeProfile('foo', user); + expect(error).toBeDefined(); + }); + + it('base case - user exists', async () => { + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + const {user: userModel} = await storeProfile(serverUrl, user); + expect(userModel).toBeDefined(); + }); + + it('base case - no user', async () => { + const {user: userModel} = await storeProfile(serverUrl, user); + expect(userModel).toBeDefined(); + }); +}); + diff --git a/app/actions/remote/channel.test.ts b/app/actions/remote/channel.test.ts new file mode 100644 index 00000000000..4a86cb6b8b0 --- /dev/null +++ b/app/actions/remote/channel.test.ts @@ -0,0 +1,762 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +/* eslint-disable max-lines */ + +import {createIntl} from 'react-intl'; + +import {DeepLink} from '@constants'; +import {SYSTEM_IDENTIFIERS} from '@constants/database'; +import DatabaseManager from '@database/manager'; +import NetworkManager from '@managers/network_manager'; + +import { + removeMemberFromChannel, + fetchChannelMembersByIds, + updateChannelMemberSchemeRoles, + fetchMemberInChannel, + fetchChannelMemberships, + addMembersToChannel, + fetchChannelByName, + createChannel, + patchChannel, + leaveChannel, + fetchChannelCreator, + fetchMyChannelsForTeam, + fetchMyChannel, + joinChannel, + joinChannelIfNeeded, + markChannelAsRead, + unsetActiveChannelOnServer, + switchToChannelByName, + goToNPSChannel, + fetchMissingDirectChannelsInfo, + fetchDirectChannelsInfo, + createDirectChannel, + fetchChannels, + makeDirectChannel, + fetchArchivedChannels, + createGroupChannel, + fetchSharedChannels, + makeGroupChannel, + getChannelMemberCountsByGroup, + getChannelTimezones, + switchToChannelById, + switchToPenultimateChannel, + switchToLastChannel, + searchChannels, + fetchChannelById, + searchAllChannels, + updateChannelNotifyProps, + toggleMuteChannel, + archiveChannel, + unarchiveChannel, + convertChannelToPrivate, + handleKickFromChannel, + fetchGroupMessageMembersCommonTeams, + convertGroupMessageToPrivateChannel, +} from './channel'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; +import type ChannelModel from '@typings/database/models/servers/channel'; + +const serverUrl = 'baseHandler.test.com'; +let operator: ServerDataOperator; + +const user: UserProfile = { + id: 'userid', + username: 'username', + roles: '', +} as UserProfile; + +let mockIsTablet: jest.Mock; +jest.mock('@utils/helpers', () => { + const original = jest.requireActual('@utils/helpers'); + mockIsTablet = jest.fn(() => false); + return { + ...original, + isTablet: mockIsTablet, + }; +}); + +let mockGetActiveServer: jest.Mock; +jest.mock('@queries/app/servers', () => { + const original = jest.requireActual('@queries/app/servers'); + mockGetActiveServer = jest.fn(() => false); + return { + ...original, + getActiveServer: mockGetActiveServer, + }; +}); + +const mockClient = { + removeFromChannel: jest.fn(), + getChannelMembersByIds: jest.fn((channelId: string, userIds: string[]) => userIds.map((uid) => ({user_id: uid, channel_id: channelId, roles: ''}))), + updateChannelMemberSchemeRoles: jest.fn(), + getMemberInChannel: jest.fn((channelId: string, userId: string) => ({id: userId + '-' + channelId, user_id: userId, channel_id: channelId, roles: ''})), + getChannel: jest.fn((channelId: string) => ({id: channelId, name: 'channel1', creatorId: user.id})), + getProfilesInChannel: jest.fn(() => ([user])), + addToChannel: jest.fn((channelId: string, userId: string) => ({id: userId + '-' + channelId, user_id: userId, channel_id: channelId, roles: ''})), + getProfilesByIds: jest.fn((userIds: string[]) => userIds.map((uid) => ({id: uid, username: 'u' + uid, roles: ''}))), + getChannelByName: jest.fn((teamId: string, channelName: string) => ({id: channelId, name: channelName, team_id: teamId})), + createChannel: jest.fn((channel: Channel) => ({...channel, id: channelId})), + getChannelMember: jest.fn((channelId: string, userId: string) => ({id: userId + '-' + channelId, user_id: userId, channel_id: channelId, roles: ''})), + patchChannel: jest.fn((channelId: string, channel: ChannelPatch) => ({...channel, id: channelId})), + getUser: jest.fn((userId: string) => ({...user, id: userId})), + getMyChannels: jest.fn((teamId: string) => ([{id: channelId, name: 'channel1', creatorId: user.id, team_id: teamId}])), + getMyChannelMembers: jest.fn(() => ([{id: user.id + '-' + channelId, user_id: user.id, channel_id: channelId, roles: ''}])), + getCategories: jest.fn((userId: string, teamId: string) => ({categories: [{id: 'categoryid', channel_id: [channelId], team_id: teamId}], order: ['categoryid']})), + viewMyChannel: jest.fn(), + getTeamByName: jest.fn((teamName: string) => ({id: teamId, name: teamName})), + getTeam: jest.fn((id: string) => ({id, name: 'teamname'})), + addToTeam: jest.fn((teamId: string, userId: string) => ({id: userId + '-' + teamId, user_id: userId, team_id: teamId, roles: ''})), + getUserByUsername: jest.fn((username: string) => ({...user, id: 'userid2', username})), + createDirectChannel: jest.fn((userId1: string, userId2: string) => ({id: userId1 + '__' + userId2, team_id: '', type: 'D', display_name: 'displayname'})), + getChannels: jest.fn((teamId: string) => ([{id: channelId, name: 'channel1', creatorId: user.id, team_id: teamId}])), + getArchivedChannels: jest.fn((teamId: string) => ([{id: channelId + 'old', name: 'channel1old', creatorId: user.id, team_id: teamId, delete_at: 1}])), + createGroupChannel: jest.fn(() => ({id: 'groupid', team_id: '', type: 'G', display_name: 'displayname'})), + getProfilesInGroupChannels: jest.fn(() => ({groupid: [user, {...user, id: 'userid2'}]})), + savePreferences: jest.fn(), + getRolesByNames: jest.fn((roles: string[]) => roles.map((r) => ({id: r, name: r} as Role))), + getSharedChannels: jest.fn((teamId: string) => ([{id: channelId + 'shared', name: 'channel1shared', creatorId: user.id, team_id: teamId, shared: true}])), + getChannelMemberCountsByGroup: jest.fn((channelId: string) => ({group_id: channelId, channel_member_count: 3, channel_member_timezones_count: 2})), + getChannelTimezones: jest.fn(() => ['est']), + autocompleteChannels: jest.fn((teamId: string) => ([{id: channelId, name: 'channel1', creatorId: user.id, team_id: teamId}])), + searchAllChannels: jest.fn(() => ([{id: channelId, name: 'channel1', creatorId: user.id, team_id: teamId}])), + updateChannelNotifyProps: jest.fn(), + deleteChannel: jest.fn(), + unarchiveChannel: jest.fn(), + convertChannelToPrivate: jest.fn(), + getGroupMessageMembersCommonTeams: jest.fn(() => ({id: teamId, name: 'teamname'})), + convertGroupMessageToPrivateChannel: jest.fn((channelId: string) => ({id: channelId, name: 'channel1', creatorId: user.id, type: 'P'})), +}; + +const teamId = 'teamid1'; +const channelId = 'channelid1'; + +const intl = createIntl({ + locale: 'en', + messages: {}, +}); + +beforeAll(() => { + // eslint-disable-next-line + // @ts-ignore + NetworkManager.getClient = () => mockClient; +}); + +beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; +}); + +afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); +}); + +describe('channelMember', () => { + it('removeMemberFromChannel - handle not found database', async () => { + const result = await removeMemberFromChannel('foo', '', '') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('removeMemberFromChannel - base case', async () => { + const result = await removeMemberFromChannel(serverUrl, channelId, user.id); + expect(result).toBeDefined(); + }); + + it('fetchChannelMembersByIds - handle not found database', async () => { + const {members, error} = await fetchChannelMembersByIds('foo', '', []); + expect(members).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('fetchChannelMembersByIds - base case', async () => { + const {members, error} = await fetchChannelMembersByIds(serverUrl, channelId, [user.id]); + expect(error).toBeUndefined(); + expect(members).toBeDefined(); + expect(members?.length).toBe(1); + }); + + it('updateChannelMemberSchemeRoles - base case', async () => { + const result = await updateChannelMemberSchemeRoles(serverUrl, channelId, user.id, true, true); + expect(result).toBeDefined(); + }); + + it('fetchMemberInChannel - handle not found database', async () => { + const {member, error} = await fetchMemberInChannel('foo', '', ''); + expect(member).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('fetchMemberInChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + const {member, error} = await fetchMemberInChannel(serverUrl, channelId, user.id); + expect(error).toBeUndefined(); + expect(member).toBeDefined(); + }); + + it('fetchChannelMemberships - base case', async () => { + const {members, users} = await fetchChannelMemberships(serverUrl, channelId, {}); + expect(users).toBeDefined(); + expect(users.length).toBe(1); + expect(members).toBeDefined(); + expect(members.length).toBe(1); + }); + + it('addMembersToChannel - handle not found database', async () => { + const {channelMemberships, error} = await addMembersToChannel('foo', '', []); + expect(channelMemberships).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('addMembersToChannel - base case', async () => { + const {channelMemberships, error} = await addMembersToChannel(serverUrl, channelId, [user.id]); + expect(error).toBeUndefined(); + expect(channelMemberships).toBeDefined(); + expect(channelMemberships?.length).toBe(1); + }); + + it('getChannelMemberCountsByGroup - base case', async () => { + const {channelMemberCountsByGroup, error} = await getChannelMemberCountsByGroup(serverUrl, channelId, true); + expect(error).toBeUndefined(); + expect(channelMemberCountsByGroup).toBeDefined(); + }); + + it('updateChannelNotifyProps - handle not found database', async () => { + const {notifyProps, error} = await updateChannelNotifyProps('foo', '', {}); + expect(notifyProps).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('updateChannelNotifyProps - base case', async () => { + const {notifyProps, error} = await updateChannelNotifyProps(serverUrl, channelId, {}); + expect(error).toBeUndefined(); + expect(notifyProps).toBeDefined(); + }); + + it('toggleMuteChannel - handle not found database', async () => { + const {notifyProps, error} = await toggleMuteChannel('foo', ''); + expect(notifyProps).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('toggleMuteChannel - base case', async () => { + await operator.handleMyChannelSettings({ + settings: [{id: channelId, user_id: user.id, channel_id: channelId, roles: '', last_viewed_at: 1, last_update_at: 1, msg_count: 10, mention_count: 0, notify_props: {}}], + prepareRecordsOnly: false, + }); + + const {notifyProps, error} = await toggleMuteChannel(serverUrl, channelId, true); + expect(error).toBeUndefined(); + expect(notifyProps).toBeDefined(); + }); +}); + +describe('channel', () => { + it('fetchChannelByName - handle not found database', async () => { + const {channel, error} = await fetchChannelByName('foo', '', ''); + expect(channel).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('fetchChannelByName - base case', async () => { + const {channel, error} = await fetchChannelByName(serverUrl, channelId, 'channelname'); + expect(error).toBeUndefined(); + expect(channel).toBeDefined(); + }); + + it('createChannel - handle not found database', async () => { + const {channel, error} = await createChannel('foo', '', '', '', 'O'); + expect(channel).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('createChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + const {channel, error} = await createChannel(serverUrl, 'channeldisplayname', 'purpose', 'header', 'O'); + expect(error).toBeUndefined(); + expect(channel).toBeDefined(); + }); + + it('patchChannel - handle not found database', async () => { + const {channel, error} = await patchChannel('foo', '', {}); + expect(channel).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('patchChannel - base case', async () => { + await operator.handleChannel({channels: [{ + id: channelId, + purpose: 'oldpurpose', + team_id: teamId, + total_msg_count: 0, + } as Channel], + prepareRecordsOnly: false}); + + const {channel, error} = await patchChannel(serverUrl, channelId, {name: 'channelname', display_name: 'Channel Name', purpose: 'purpose', header: 'header'}); + expect(error).toBeUndefined(); + expect(channel).toBeDefined(); + }); + + it('leaveChannel - handle not found database', async () => { + const {error} = await leaveChannel('foo', ''); + expect(error).toBeDefined(); + }); + + it('leaveChannel - no user', async () => { + const {error} = await leaveChannel(serverUrl, channelId); + expect(error).toBeDefined(); + expect(error).toBe('current user not found'); + }); + + it('leaveChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + + const result = await leaveChannel(serverUrl, channelId); + expect(result.error).toBeUndefined(); + expect(result).toBeDefined(); + }); + + it('fetchChannelCreator - handle not found database', async () => { + const {user: fetchedUser, error} = await fetchChannelCreator('foo', ''); + expect(fetchedUser).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('fetchChannelCreator - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + await operator.handleChannel({channels: [{ + id: channelId, + team_id: teamId, + total_msg_count: 0, + creator_id: user.id, + } as Channel], + prepareRecordsOnly: false}); + + const {user: fetchedUser, error} = await fetchChannelCreator(serverUrl, channelId); + expect(error).toBeUndefined(); + expect(fetchedUser).toBeDefined(); + }); + + it('fetchMyChannelsForTeam - handle not found database', async () => { + const {error} = await fetchMyChannelsForTeam('foo', ''); + expect(error).toBeDefined(); + }); + + it('fetchMyChannelsForTeam - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + const {channels, memberships, categories, error} = await fetchMyChannelsForTeam(serverUrl, teamId, true, 0, false, true); + expect(error).toBeUndefined(); + expect(channels).toBeDefined(); + expect(memberships).toBeDefined(); + expect(categories).toBeDefined(); + }); + + it('fetchMyChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + const {channels, memberships, error} = await fetchMyChannel(serverUrl, teamId, channelId); + expect(error).toBeUndefined(); + expect(channels).toBeDefined(); + expect(memberships).toBeDefined(); + }); + + it('joinChannel - handle not found database', async () => { + const {error} = await joinChannel('foo', ''); + expect(error).toBeDefined(); + }); + + it('joinChannel - by id', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + const {channel, member, error} = await joinChannel(serverUrl, teamId, channelId); + expect(error).toBeUndefined(); + expect(channel).toBeDefined(); + expect(member).toBeDefined(); + }); + + it('joinChannel - by name', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + const {channel, member, error} = await joinChannel(serverUrl, teamId, undefined, 'channelname'); + expect(error).toBeUndefined(); + expect(channel).toBeDefined(); + expect(member).toBeDefined(); + }); + + it('joinChannelIfNeeded - handle not found database', async () => { + const {error} = await joinChannelIfNeeded('foo', '') as {error: unknown}; + expect(error).toBeDefined(); + }); + + it('joinChannelIfNeeded - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + const {channel, member} = await joinChannelIfNeeded(serverUrl, channelId) as {channel: Channel; member: ChannelMember}; + expect(channel).toBeDefined(); + expect(member).toBeDefined(); + }); + + it('joinChannelIfNeeded - not needed', async () => { + await operator.handleMyChannel({channels: [{ + id: channelId, + team_id: teamId, + total_msg_count: 0, + creator_id: user.id, + } as Channel], + myChannels: [{ + id: 'id', + channel_id: channelId, + user_id: user.id, + msg_count: 0, + } as ChannelMembership], + prepareRecordsOnly: false}); + + const result = await joinChannelIfNeeded(serverUrl, channelId) as {}; + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('channel'); + expect(result).not.toHaveProperty('error'); + }); + + it('markChannelAsRead - base case', async () => { + const result = await markChannelAsRead(serverUrl, channelId, true); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('unsetActiveChannelOnServer - base case', async () => { + const result = await unsetActiveChannelOnServer(serverUrl); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('switchToChannelByName - handle not found database', async () => { + const {error} = await switchToChannelByName('foo', '', '', () => {}, intl); + expect(error).toBeDefined(); + }); + + it('switchToChannelByName - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + + const result = await switchToChannelByName(serverUrl, 'channelname', 'teamname', () => {}, intl); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('switchToChannelByName - team redirect', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + + const result = await switchToChannelByName(serverUrl, 'channelname', DeepLink.Redirect, () => {}, intl); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('goToNPSChannel - handle not found database', async () => { + const {error} = await goToNPSChannel('foo'); + expect(error).toBeDefined(); + }); + + it('goToNPSChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + + const result = await goToNPSChannel(serverUrl); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('fetchChannels - base case', async () => { + const {channels, error} = await fetchChannels(serverUrl, teamId); + expect(error).toBeUndefined(); + expect(channels).toBeDefined(); + }); + + it('fetchArchivedChannels - base case', async () => { + const {channels, error} = await fetchArchivedChannels(serverUrl, teamId); + expect(error).toBeUndefined(); + expect(channels).toBeDefined(); + }); + + it('fetchSharedChannels - base case', async () => { + const {channels, error} = await fetchSharedChannels(serverUrl, teamId); + expect(error).toBeUndefined(); + expect(channels).toBeDefined(); + }); + + it('getChannelTimezones - base case', async () => { + const {channelTimezones, error} = await getChannelTimezones(serverUrl, channelId); + expect(error).toBeUndefined(); + expect(channelTimezones).toBeDefined(); + }); + + it('switchToChannelById - handle not found database', async () => { + const {error} = await switchToChannelById('foo', '') as {error: unknown}; + expect(error).toBeDefined(); + }); + + it('switchToChannelById - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + + const result = await switchToChannelById(serverUrl, channelId); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('switchToPenultimateChannel - handle not found database', async () => { + const {error} = await switchToPenultimateChannel('foo') as {error: unknown}; + expect(error).toBeDefined(); + }); + + it('switchToPenultimateChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + + const result = await switchToPenultimateChannel(serverUrl); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('switchToLastChannel - handle not found database', async () => { + const {error} = await switchToLastChannel('foo') as {error: unknown}; + expect(error).toBeDefined(); + }); + + it('switchToLastChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + + const result = await switchToLastChannel(serverUrl); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('searchChannels - handle error', async () => { + const {error} = await searchChannels('foo', '', teamId, true) as {error: unknown}; + expect(error).toBeDefined(); + }); + + it('searchChannels - base case', async () => { + const result = await searchChannels(serverUrl, 'searchterm', teamId, false); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + expect(result).toHaveProperty('channels'); + }); + + it('fetchChannelById - base case', async () => { + const result = await fetchChannelById(serverUrl, channelId); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('searchAllChannels - handle not found database', async () => { + const {error} = await searchAllChannels('foo', '') as {error: unknown}; + expect(error).toBeDefined(); + }); + + it('searchAllChannels - base case', async () => { + const result = await searchAllChannels(serverUrl, 'searchterm'); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + expect(result).toHaveProperty('channels'); + }); + + it('archiveChannel - handle not found database', async () => { + const {error} = await archiveChannel('foo', '') as {error: unknown}; + expect(error).toBeDefined(); + }); + + it('archiveChannel - base case', async () => { + const result = await archiveChannel(serverUrl, channelId); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('unarchiveChannel - base case', async () => { + const result = await unarchiveChannel(serverUrl, channelId); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('convertChannelToPrivate - handle not found database', async () => { + const {error} = await convertChannelToPrivate('foo', '') as {error: unknown}; + expect(error).toBeDefined(); + }); + + it('convertChannelToPrivate - base case', async () => { + await operator.handleChannel({channels: [{ + id: channelId, + team_id: teamId, + total_msg_count: 0, + type: 'O', + } as Channel], + prepareRecordsOnly: false}); + + const result = await convertChannelToPrivate(serverUrl, channelId); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('handleKickFromChannel - handle not found database', async () => { + const {error} = await handleKickFromChannel('foo', ''); + expect(error).toBeDefined(); + }); + + it('handleKickFromChannel - not current channel', async () => { + const result = await handleKickFromChannel(serverUrl, channelId); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); + + it('handleKickFromChannel - base case', async () => { + mockIsTablet.mockImplementationOnce(() => true); + mockGetActiveServer.mockImplementationOnce(() => ({url: serverUrl})); + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_CHANNEL_ID, value: channelId}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + + const result = await handleKickFromChannel(serverUrl, channelId); + expect(result).toBeDefined(); + expect(result).not.toHaveProperty('error'); + }); +}); + +describe('direct and group', () => { + it('fetchMissingDirectChannelsInfo - handle not found database', async () => { + const {directChannels, error} = await fetchMissingDirectChannelsInfo('foo', []); + expect(directChannels).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('fetchMissingDirectChannelsInfo - base case', async () => { + const {directChannels, error} = await fetchMissingDirectChannelsInfo(serverUrl, [{id: 'id', name: 'name', type: 'D'} as Channel], 'channelname'); + expect(error).toBeUndefined(); + expect(directChannels).toBeDefined(); + }); + + it('fetchDirectChannelsInfo - handle not found database', async () => { + const {directChannels, error} = await fetchDirectChannelsInfo('foo', []); + expect(directChannels).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('fetchDirectChannelsInfo - base case', async () => { + const channel = {id: 'id', name: 'name', type: 'D'} as Channel; + const {directChannels, error} = await fetchDirectChannelsInfo(serverUrl, [{...channel, toApi: () => channel} as unknown as ChannelModel]); + expect(error).toBeUndefined(); + expect(directChannels).toBeDefined(); + }); + + it('createDirectChannel - handle not found database', async () => { + const {data, error} = await createDirectChannel('foo', ''); + expect(data).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('createDirectChannel - no user', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + const {data, error} = await createDirectChannel(serverUrl, 'userid2'); + expect(data).toBeUndefined(); + expect(error).toBeDefined(); + expect(error).toBe('Cannot get the current user'); + }); + + it('createDirectChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + + const {data, error} = await createDirectChannel(serverUrl, 'userid2'); + expect(error).toBeUndefined(); + expect(data).toBeDefined(); + }); + + it('createDirectChannel - with display name', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + + const {data, error} = await createDirectChannel(serverUrl, 'userid2', 'displayname'); + expect(error).toBeUndefined(); + expect(data).toBeDefined(); + }); + + it('makeDirectChannel - handle not found database', async () => { + const {data, error} = await makeDirectChannel('foo', ''); + expect(data).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('makeDirectChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + + const {data, error} = await makeDirectChannel(serverUrl, 'userid2'); + expect(error).toBeUndefined(); + expect(data).toBeDefined(); + }); + + it('makeDirectChannel - with display name', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + + const {data, error} = await makeDirectChannel(serverUrl, 'userid2', 'displayname'); + expect(error).toBeUndefined(); + expect(data).toBeDefined(); + }); + + it('createGroupChannel - handle not found database', async () => { + const {data, error} = await createGroupChannel('foo', []); + expect(data).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('createGroupChannel - no user', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + const {data, error} = await createGroupChannel(serverUrl, ['userid2']); + expect(data).toBeUndefined(); + expect(error).toBeDefined(); + expect(error).toBe('Cannot get the current user'); + }); + + it('createGroupChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + + const {data, error} = await createGroupChannel(serverUrl, ['userid2']); + expect(error).toBeUndefined(); + expect(data).toBeDefined(); + }); + + it('makeGroupChannel - handle not found database', async () => { + const {data, error} = await makeGroupChannel('foo', []); + expect(data).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('makeGroupChannel - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user], prepareRecordsOnly: false}); + + const {data, error} = await makeGroupChannel(serverUrl, ['userid2']); + expect(error).toBeUndefined(); + expect(data).toBeDefined(); + }); + + it('fetchGroupMessageMembersCommonTeams - base case', async () => { + const {teams, error} = await fetchGroupMessageMembersCommonTeams(serverUrl, channelId); + expect(error).toBeUndefined(); + expect(teams).toBeDefined(); + }); + + it('convertGroupMessageToPrivateChannel - handle not found database', async () => { + const {updatedChannel, error} = await convertGroupMessageToPrivateChannel('foo', '', '', ''); + expect(updatedChannel).toBeUndefined(); + expect(error).toBeDefined(); + }); + + it('convertGroupMessageToPrivateChannel - base case', async () => { + await operator.handleChannel({channels: [{ + id: channelId, + team_id: teamId, + total_msg_count: 0, + type: 'G', + } as Channel], + prepareRecordsOnly: false}); + + const {updatedChannel, error} = await convertGroupMessageToPrivateChannel(serverUrl, channelId, teamId, 'newprivatechannel'); + expect(error).toBeUndefined(); + expect(updatedChannel).toBeDefined(); + }); +}); diff --git a/app/actions/remote/channel.ts b/app/actions/remote/channel.ts index 3d0e36bad34..5140cc576fc 100644 --- a/app/actions/remote/channel.ts +++ b/app/actions/remote/channel.ts @@ -31,6 +31,7 @@ import {logDebug, logError, logInfo} from '@utils/log'; import {showMuteChannelSnackbar} from '@utils/snack_bar'; import {displayGroupMessageName, displayUsername} from '@utils/user'; +import {fetchChannelBookmarks} from './channel_bookmark'; import {fetchGroupsForChannelIfConstrained} from './groups'; import {fetchPostsForChannel} from './post'; import {openChannelIfNeeded, savePreference} from './preference'; @@ -98,6 +99,7 @@ export async function fetchChannelMembersByIds(serverUrl: string, channelId: str return {error}; } } + export async function updateChannelMemberSchemeRoles(serverUrl: string, channelId: string, userId: string, isSchemeUser: boolean, isSchemeAdmin: boolean, fetchOnly = false) { try { const client = NetworkManager.getClient(serverUrl); @@ -796,7 +798,7 @@ export async function createDirectChannel(serverUrl: string, userId: string, dis const config = await getConfig(database); const teammateDisplayNameSetting = getTeammateNameDisplaySetting(preferences || [], config.LockTeammateNameDisplay, config.TeammateNameDisplay, license); const {directChannels, users} = await fetchMissingDirectChannelsInfo(serverUrl, [created], currentUser.locale, teammateDisplayNameSetting, currentUser.id, true); - created.display_name = directChannels?.[0].display_name || created.display_name; + created.display_name = (directChannels?.length && directChannels?.[0].display_name) || created.display_name; if (users?.length) { profiles.push(...users); } @@ -1049,6 +1051,7 @@ export async function switchToChannelById(serverUrl: string, channelId: string, DeviceEventEmitter.emit(Events.CHANNEL_SWITCH, true); fetchPostsForChannel(serverUrl, channelId); + fetchChannelBookmarks(serverUrl, channelId); await switchToChannel(serverUrl, channelId, teamId, skipLastUnread); openChannelIfNeeded(serverUrl, channelId); markChannelAsRead(serverUrl, channelId); @@ -1240,7 +1243,7 @@ export const handleKickFromChannel = async (serverUrl: string, channelId: string const currentChannelId = await getCurrentChannelId(database); if (currentChannelId !== channelId) { - return; + return {}; } const currentServer = await getActiveServer(); @@ -1270,8 +1273,10 @@ export const handleKickFromChannel = async (serverUrl: string, channelId: string } else { await setCurrentChannelId(operator, ''); } + return {}; } catch (error) { logDebug('cannot kick user from channel', error); + return {error}; } }; diff --git a/app/actions/remote/channel_bookmark.ts b/app/actions/remote/channel_bookmark.ts new file mode 100644 index 00000000000..825295ad5b8 --- /dev/null +++ b/app/actions/remote/channel_bookmark.ts @@ -0,0 +1,100 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import DatabaseManager from '@database/manager'; +import NetworkManager from '@managers/network_manager'; +import websocketManager from '@managers/websocket_manager'; +import {getBookmarksSince, getChannelBookmarkById} from '@queries/servers/channel_bookmark'; +import {getConfigValue} from '@queries/servers/system'; +import {getFullErrorMessage} from '@utils/errors'; +import {logError} from '@utils/log'; + +import {forceLogoutIfNecessary} from './session'; + +export async function fetchChannelBookmarks(serverUrl: string, channelId: string, fetchOnly = false) { + try { + const client = NetworkManager.getClient(serverUrl); + const {database, operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + + const bookmarksEnabled = (await getConfigValue(database, 'FeatureFlagChannelBookmarks')) === 'true'; + if (!bookmarksEnabled) { + return {bookmarks: []}; + } + + const since = await getBookmarksSince(database, channelId); + const bookmarks = await client.getChannelBookmarksForChannel(channelId, since); + + if (!fetchOnly && bookmarks.length) { + await operator.handleChannelBookmark({bookmarks, prepareRecordsOnly: false}); + } + + return {bookmarks}; + } catch (error) { + logError('error on fetchChannelBookmarks', getFullErrorMessage(error)); + forceLogoutIfNecessary(serverUrl, error); + return {error}; + } +} + +export async function createChannelBookmark(serverUrl: string, channelId: string, bookmark: ChannelBookmark, fetchOnly = false) { + try { + const client = NetworkManager.getClient(serverUrl); + const {operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const ws = websocketManager.getClient(serverUrl); + + const created = await client.createChannelBookmark(channelId, bookmark, ws?.getConnectionId()); + if (!fetchOnly) { + await operator.handleChannelBookmark({bookmarks: [created], prepareRecordsOnly: false}); + } + return {bookmark: created}; + } catch (error) { + logError('error on createChannelBookmark', getFullErrorMessage(error)); + forceLogoutIfNecessary(serverUrl, error); + return {error}; + } +} + +export async function editChannelBookmark(serverUrl: string, bookmark: ChannelBookmark, fetchOnly = false) { + try { + const client = NetworkManager.getClient(serverUrl); + const {operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const ws = websocketManager.getClient(serverUrl); + + const result = await client.updateChannelBookmark(bookmark.channel_id, bookmark, ws?.getConnectionId()); + const bookmarks = [result.updated]; + if (result.deleted) { + bookmarks.push(result.deleted); + } + if (!fetchOnly) { + await operator.handleChannelBookmark({bookmarks, prepareRecordsOnly: false}); + } + return {bookmarks: result}; + } catch (error) { + logError('error on editChannelBookmark', getFullErrorMessage(error)); + forceLogoutIfNecessary(serverUrl, error); + return {error}; + } +} + +export async function deleteChannelBookmark(serverUrl: string, channelId: string, bookmarkId: string, fetchOnly = false) { + try { + const client = NetworkManager.getClient(serverUrl); + const {database, operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const ws = websocketManager.getClient(serverUrl); + + const result = await client.deleteChannelBookmark(channelId, bookmarkId, ws?.getConnectionId()); + + const bookmark = await getChannelBookmarkById(database, bookmarkId); + if (bookmark && !fetchOnly) { + const b = bookmark.toApi(); + b.delete_at = Date.now(); + await operator.handleChannelBookmark({bookmarks: [b], prepareRecordsOnly: false}); + } + + return {bookmarks: result}; + } catch (error) { + logError('error on deleteChannelBookmark', getFullErrorMessage(error)); + forceLogoutIfNecessary(serverUrl, error); + return {error}; + } +} diff --git a/app/actions/remote/entry/common.ts b/app/actions/remote/entry/common.ts index c8a394410e5..6a6e56be38a 100644 --- a/app/actions/remote/entry/common.ts +++ b/app/actions/remote/entry/common.ts @@ -1,6 +1,9 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {nativeApplicationVersion} from 'expo-application'; +import {RESULTS, checkNotifications} from 'react-native-permissions'; + import {fetchMissingDirectChannelsInfo, fetchMyChannelsForTeam, handleKickFromChannel, type MyChannelsRequest} from '@actions/remote/channel'; import {fetchGroupsForMember} from '@actions/remote/groups'; import {fetchPostsForUnreadChannels} from '@actions/remote/post'; @@ -22,12 +25,12 @@ import {getDeviceToken} from '@queries/app/global'; import {getChannelById, queryAllChannelsForTeam, queryChannelsById} from '@queries/servers/channel'; import {prepareModels, truncateCrtRelatedTables} from '@queries/servers/entry'; import {getHasCRTChanged} from '@queries/servers/preference'; -import {getConfig, getCurrentChannelId, getCurrentTeamId, getIsDataRetentionEnabled, getPushVerificationStatus, getWebSocketLastDisconnected, setCurrentTeamAndChannelId} from '@queries/servers/system'; +import {getConfig, getCurrentChannelId, getCurrentTeamId, getIsDataRetentionEnabled, getPushVerificationStatus, getLastFullSync, setCurrentTeamAndChannelId, getConfigValue} from '@queries/servers/system'; import {deleteMyTeams, getAvailableTeamIds, getTeamChannelHistory, queryMyTeams, queryMyTeamsByIds, queryTeamsById} from '@queries/servers/team'; import NavigationStore from '@store/navigation_store'; import {isDMorGM, sortChannelsByDisplayName} from '@utils/channel'; import {getFullErrorMessage, isErrorWithStatusCode} from '@utils/errors'; -import {isTablet} from '@utils/helpers'; +import {isMinimumServerVersion, isTablet} from '@utils/helpers'; import {logDebug} from '@utils/log'; import {processIsCRTEnabled} from '@utils/thread'; @@ -124,7 +127,7 @@ const entryRest = async (serverUrl: string, teamId?: string, channelId?: string, } const {database} = operator; - const lastDisconnectedAt = since || await getWebSocketLastDisconnected(database); + const lastDisconnectedAt = since || await getLastFullSync(database); const fetchedData = await fetchAppEntryData(serverUrl, lastDisconnectedAt, teamId, channelId); if ('error' in fetchedData) { @@ -413,17 +416,25 @@ async function restDeferredAppEntryActions( }, FETCH_MISSING_DM_TIMEOUT); } -export const registerDeviceToken = async (serverUrl: string) => { +export const setExtraSessionProps = async (serverUrl: string) => { try { - const client = NetworkManager.getClient(serverUrl); - + const {database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const serverVersion = await getConfigValue(database, 'Version'); const deviceToken = await getDeviceToken(); - if (deviceToken) { - client.attachDevice(deviceToken); + + // For new servers, we want to send all the information. + // For old servers, we only want to send the information when there + // is a device token. Sending the rest of the information should not + // create any issue. + if (isMinimumServerVersion(serverVersion, 10, 1, 0) || deviceToken) { + const res = await checkNotifications(); + const granted = res.status === RESULTS.GRANTED || res.status === RESULTS.LIMITED; + const client = NetworkManager.getClient(serverUrl); + client.setExtraSessionProps(deviceToken, !granted, nativeApplicationVersion); } return {}; } catch (error) { - logDebug('error on registerDeviceToken', getFullErrorMessage(error)); + logDebug('error on setExtraSessionProps', getFullErrorMessage(error)); return {error}; } }; diff --git a/app/actions/remote/entry/login.ts b/app/actions/remote/entry/login.ts index 6206e03e347..48b7349141a 100644 --- a/app/actions/remote/entry/login.ts +++ b/app/actions/remote/entry/login.ts @@ -4,6 +4,7 @@ import {fetchConfigAndLicense} from '@actions/remote/systems'; import DatabaseManager from '@database/manager'; import {getServerCredentials} from '@init/credentials'; +import PerformanceMetricsManager from '@managers/performance_metrics_manager'; import WebsocketManager from '@managers/websocket_manager'; type AfterLoginArgs = { @@ -16,6 +17,11 @@ export async function loginEntry({serverUrl}: AfterLoginArgs): Promise<{error?: return {error: `${serverUrl} database not found`}; } + // There are cases where the target may be reset and a performance metric + // be added after login. This would be done with a wrong value, so we make + // sure we don't do this by skipping the load metric here. + PerformanceMetricsManager.skipLoadMetric(); + try { const clData = await fetchConfigAndLicense(serverUrl, false); if (clData.error) { diff --git a/app/actions/remote/entry/notification.test.ts b/app/actions/remote/entry/notification.test.ts new file mode 100644 index 00000000000..7b25eb41e46 --- /dev/null +++ b/app/actions/remote/entry/notification.test.ts @@ -0,0 +1,201 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {ActionType} from '@constants'; +import DatabaseManager from '@database/manager'; +import NetworkManager from '@managers/network_manager'; +import PerformanceMetricsManager from '@managers/performance_metrics_manager'; +import {prepareThreadsFromReceivedPosts} from '@queries/servers/thread'; +import NavigationStore from '@store/navigation_store'; +import {mockApiClient} from '@test/mock_api_client'; +import TestHelper from '@test/test_helper'; + +import {pushNotificationEntry} from './notification'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; + +jest.mock('@managers/performance_metrics_manager'); +jest.mock('@store/navigation_store'); + +const mockedNavigationStore = jest.mocked(NavigationStore); + +describe('Performance metrics are set correctly', () => { + const serverUrl = 'http://www.someserverurl.com'; + let operator: ServerDataOperator; + let post: Post; + beforeAll(() => { + mockApiClient.get.mockImplementation((url: string) => { + if (url.match(/\/api\/v4\/channels\/[a-z1-90-]*\/posts/)) { + return {status: 200, ok: true, data: {order: [], posts: {}}}; + } + if (url.match(/\/api\/v4\/channels\/[a-z1-90-]*\/stats/)) { + return {status: 200, ok: true, data: {}}; + } + if (url.match(/\/api\/v4\/posts\/[a-z1-90-]*\/thread/)) { + return {status: 200, ok: true, data: {order: [], posts: {}}}; + } + console.log(`GET ${url} not registered in the mock`); + return {status: 404, ok: false}; + }); + + mockApiClient.post.mockImplementation((url: string) => { + if (url.match(/\/api\/v4\/channels\/members\/me\/view/)) { + return {status: 200, ok: true, data: {}}; + } + + console.log(`POST ${url} not registered in the mock`); + return {status: 404, ok: false}; + }); + mockedNavigationStore.waitUntilScreenIsTop.mockImplementation(() => Promise.resolve()); + + // There are no problems when running the tests for this file alone without this line + // but for some reason, when running several tests together, it fails if we don't add this. + mockedNavigationStore.getScreensInStack.mockImplementation(() => []); + }); + afterAll(() => { + mockApiClient.get.mockReset(); + mockApiClient.post.mockReset(); + }); + + beforeEach(async () => { + const client = await NetworkManager.createClient(serverUrl); + expect(client).toBeTruthy(); + operator = (await TestHelper.setupServerDatabase(serverUrl)).operator; + await DatabaseManager.setActiveServerDatabase(serverUrl); + post = TestHelper.fakePost(TestHelper.basicChannel!.id); + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_NEW, + order: [post.id], + posts: [post], + prepareRecordsOnly: false, + }); + const threadModels = await prepareThreadsFromReceivedPosts(operator, [post], true); + await operator.batchRecords(threadModels, 'test'); + }); + + afterEach(async () => { + await TestHelper.tearDown(); + NetworkManager.invalidateClient(serverUrl); + }); + + it('channel notification', async () => { + await operator.handleConfigs({ + configs: [ + {id: 'CollapsedThreads', value: 'default_on'}, + {id: 'FeatureFlagCollapsedThreads', value: 'true'}, + ], + configsToDelete: [], + prepareRecordsOnly: false, + }); + + await pushNotificationEntry(serverUrl, { + channel_id: TestHelper.basicChannel!.id, + team_id: TestHelper.basicTeam!.id, + isCRTEnabled: false, // isCRTEnabled is not checked at this level + post_id: '', // Post ID is not checked at this level + type: '', // Type is not checked at this level + version: '', // Version is not checked at this level + }); + + expect(PerformanceMetricsManager.setLoadTarget).toHaveBeenCalledWith('CHANNEL'); + }); + + it('thread notification', async () => { + const commentPost = TestHelper.fakePost(TestHelper.basicChannel!.id); + commentPost.root_id = post.id; + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_NEW, + order: [commentPost.id], + posts: [commentPost], + prepareRecordsOnly: false, + }); + const threadModels = await prepareThreadsFromReceivedPosts(operator, [commentPost], true); + await operator.batchRecords(threadModels, 'test'); + await operator.handleConfigs({ + configs: [ + {id: 'CollapsedThreads', value: 'default_on'}, + {id: 'FeatureFlagCollapsedThreads', value: 'true'}, + ], + configsToDelete: [], + prepareRecordsOnly: false, + }); + + await pushNotificationEntry(serverUrl, { + root_id: post.id, + channel_id: TestHelper.basicChannel!.id, + team_id: TestHelper.basicTeam!.id, + isCRTEnabled: false, // isCRTEnabled is not checked at this level + post_id: '', // Post ID is not checked at this level + type: '', // Type is not checked at this level + version: '', // Version is not checked at this level + }); + + expect(PerformanceMetricsManager.setLoadTarget).toHaveBeenCalledWith('THREAD'); + }); + + it('thread notification with wrong root id', async () => { + const commentPost = TestHelper.fakePost(TestHelper.basicChannel!.id); + commentPost.root_id = post.id; + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_NEW, + order: [commentPost.id], + posts: [commentPost], + prepareRecordsOnly: false, + }); + const threadModels = await prepareThreadsFromReceivedPosts(operator, [commentPost], true); + await operator.batchRecords(threadModels, 'test'); + await operator.handleConfigs({ + configs: [ + {id: 'CollapsedThreads', value: 'default_on'}, + {id: 'FeatureFlagCollapsedThreads', value: 'true'}, + ], + configsToDelete: [], + prepareRecordsOnly: false, + }); + + await pushNotificationEntry(serverUrl, { + root_id: commentPost.id, + channel_id: TestHelper.basicChannel!.id, + team_id: TestHelper.basicTeam!.id, + isCRTEnabled: false, // isCRTEnabled is not checked at this level + post_id: '', // Post ID is not checked at this level + type: '', // Type is not checked at this level + version: '', // Version is not checked at this level + }); + + expect(PerformanceMetricsManager.setLoadTarget).toHaveBeenCalledWith('THREAD'); + }); + + it('thread notification with non crt', async () => { + const commentPost = TestHelper.fakePost(TestHelper.basicChannel!.id); + commentPost.root_id = post.id; + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_NEW, + order: [commentPost.id], + posts: [commentPost], + prepareRecordsOnly: false, + }); + const threadModels = await prepareThreadsFromReceivedPosts(operator, [commentPost], true); + await operator.batchRecords(threadModels, 'test'); + await operator.handleConfigs({ + configs: [ + {id: 'CollapsedThreads', value: 'disabled'}, + {id: 'FeatureFlagCollapsedThreads', value: 'false'}, + ], + configsToDelete: [], + prepareRecordsOnly: false, + }); + + await pushNotificationEntry(serverUrl, { + root_id: post.id, + channel_id: TestHelper.basicChannel!.id, + team_id: TestHelper.basicTeam!.id, + isCRTEnabled: false, // isCRTEnabled is not checked at this level + post_id: '', // Post ID is not checked at this level + type: '', // Type is not checked at this level + version: '', // Version is not checked at this level + }); + + expect(PerformanceMetricsManager.setLoadTarget).toHaveBeenCalledWith('CHANNEL'); + }); +}); diff --git a/app/actions/remote/entry/notification.ts b/app/actions/remote/entry/notification.ts index 18063756477..2876c801526 100644 --- a/app/actions/remote/entry/notification.ts +++ b/app/actions/remote/entry/notification.ts @@ -7,6 +7,7 @@ import {fetchMyTeam} from '@actions/remote/team'; import {fetchAndSwitchToThread} from '@actions/remote/thread'; import {getDefaultThemeByAppearance} from '@context/theme'; import DatabaseManager from '@database/manager'; +import PerformanceMetricsManager from '@managers/performance_metrics_manager'; import WebsocketManager from '@managers/websocket_manager'; import {getMyChannel} from '@queries/servers/channel'; import {getPostById} from '@queries/servers/post'; @@ -103,13 +104,16 @@ export async function pushNotificationEntry(serverUrl: string, notification: Not const actualRootId = post && ('root_id' in post ? post.root_id : post.rootId); if (actualRootId) { + PerformanceMetricsManager.setLoadTarget('THREAD'); await fetchAndSwitchToThread(serverUrl, actualRootId, true); } else if (post) { + PerformanceMetricsManager.setLoadTarget('THREAD'); await fetchAndSwitchToThread(serverUrl, rootId, true); } else { emitNotificationError('Post'); } } else { + PerformanceMetricsManager.setLoadTarget('CHANNEL'); await switchToChannelById(serverUrl, channelId, teamId); } } diff --git a/app/actions/remote/file.ts b/app/actions/remote/file.ts index 14461f10878..0a4fefb9809 100644 --- a/app/actions/remote/file.ts +++ b/app/actions/remote/file.ts @@ -23,16 +23,17 @@ export const downloadProfileImage = (serverUrl: string, userId: string, lastPict export const uploadFile = ( serverUrl: string, - file: FileInfo, + file: FileInfo | ExtractedFileInfo, channelId: string, onProgress: (fractionCompleted: number, bytesRead?: number | null | undefined) => void = () => {/*Do Nothing*/}, onComplete: (response: ClientResponse) => void = () => {/*Do Nothing*/}, onError: (response: ClientResponseError) => void = () => {/*Do Nothing*/}, skipBytes = 0, + isBookmark = false, ) => { try { const client = NetworkManager.getClient(serverUrl); - return {cancel: client.uploadPostAttachment(file, channelId, onProgress, onComplete, onError, skipBytes)}; + return {cancel: client.uploadAttachment(file, channelId, onProgress, onComplete, onError, skipBytes, isBookmark)}; } catch (error) { logDebug('error on uploadFile', getFullErrorMessage(error)); return {error}; diff --git a/app/actions/remote/performance.test.ts b/app/actions/remote/performance.test.ts new file mode 100644 index 00000000000..bf64faf789e --- /dev/null +++ b/app/actions/remote/performance.test.ts @@ -0,0 +1,67 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import NetworkManager from '@managers/network_manager'; +import {mockApiClient} from '@test/mock_api_client'; + +import {sendPerformanceReport} from './performance'; + +describe('sendPerformanceReport', () => { + const serverUrl = 'http://www.someserverurl.com'; + const report: PerformanceReport = { + counters: [], + start: 1234, + end: 1235, + histograms: [ + { + metric: 'metric1', + timestamp: 1234, + value: 123, + }, + { + metric: 'metric1', + timestamp: 1234, + value: 124, + }, + { + metric: 'metric2', + timestamp: 1234, + value: 125, + }, + ], + labels: { + agent: 'rnapp', + platform: 'ios', + }, + version: '0.1.0', + }; + + beforeAll(() => { + mockApiClient.post.mockImplementation(() => ({status: 200, ok: true})); + }); + + afterAll(() => { + mockApiClient.post.mockReset(); + }); + + beforeEach(async () => { + const client = await NetworkManager.createClient(serverUrl); + expect(client).toBeTruthy(); + }); + + afterEach(async () => { + NetworkManager.invalidateClient(serverUrl); + }); + + it('happy path', async () => { + const {error} = await sendPerformanceReport(serverUrl, report); + expect(error).toBeFalsy(); + expect(mockApiClient.post).toHaveBeenCalledWith(`${serverUrl}/api/v4/client_perf`, {body: report, headers: {}}); + }); + + it('properly returns error', async () => { + mockApiClient.post.mockImplementationOnce(() => ({status: 404, ok: false})); + const {error} = await sendPerformanceReport(serverUrl, report); + expect(error).toBeTruthy(); + }); +}); diff --git a/app/actions/remote/performance.ts b/app/actions/remote/performance.ts new file mode 100644 index 00000000000..4a68935d2d5 --- /dev/null +++ b/app/actions/remote/performance.ts @@ -0,0 +1,20 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import NetworkManager from '@managers/network_manager'; +import {getFullErrorMessage} from '@utils/errors'; +import {logDebug} from '@utils/log'; + +import {forceLogoutIfNecessary} from './session'; + +export const sendPerformanceReport = async (serverUrl: string, report: PerformanceReport) => { + try { + const client = NetworkManager.getClient(serverUrl); + await client.sendPerformanceReport(report); + return {}; + } catch (error) { + logDebug('error on sendPerformanceReport', getFullErrorMessage(error)); + forceLogoutIfNecessary(serverUrl, error); + return {error}; + } +}; diff --git a/app/actions/remote/post.ts b/app/actions/remote/post.ts index d557a7d12aa..342478896d9 100644 --- a/app/actions/remote/post.ts +++ b/app/actions/remote/post.ts @@ -52,7 +52,7 @@ type AuthorsRequest = { error?: unknown; } -export async function createPost(serverUrl: string, post: Partial, files: FileInfo[] = []): Promise<{data?: boolean; error?: any}> { +export async function createPost(serverUrl: string, post: Partial, files: FileInfo[] = []): Promise<{data?: boolean; error?: unknown}> { const operator = DatabaseManager.serverDatabases[serverUrl]?.operator; if (!operator) { return {error: `${serverUrl} database not found`}; @@ -454,7 +454,7 @@ export async function fetchPostsSince(serverUrl: string, channelId: string, sinc const isCRTEnabled = await getIsCRTEnabled(database); const data = await client.getPostsSince(channelId, since, isCRTEnabled, isCRTEnabled); - const result = await processPostsFetched(data); + const result = processPostsFetched(data); if (!fetchOnly) { const models = await operator.handlePosts({ ...result, @@ -571,7 +571,7 @@ export async function fetchPostThread(serverUrl: string, postId: string, options }); const result = processPostsFetched(data); let posts: Model[] = []; - if (!fetchOnly) { + if (result.posts.length && !fetchOnly) { const models: Model[] = []; posts = await operator.handlePosts({ ...result, diff --git a/app/actions/remote/search.ts b/app/actions/remote/search.ts index 86ab63a8cb4..0010ab1a1f8 100644 --- a/app/actions/remote/search.ts +++ b/app/actions/remote/search.ts @@ -2,11 +2,12 @@ // See LICENSE.txt for license information. import {getPosts} from '@actions/local/post'; +import {General} from '@app/constants'; import {SYSTEM_IDENTIFIERS} from '@constants/database'; import DatabaseManager from '@database/manager'; import NetworkManager from '@managers/network_manager'; import {prepareMissingChannelsForAllTeams} from '@queries/servers/channel'; -import {getConfigValue} from '@queries/servers/system'; +import {getConfigValue, getCurrentTeamId} from '@queries/servers/system'; import {getIsCRTEnabled, prepareThreadsFromReceivedPosts} from '@queries/servers/thread'; import {getCurrentUser} from '@queries/servers/user'; import {getFullErrorMessage} from '@utils/errors'; @@ -18,6 +19,7 @@ import {fetchPostAuthors, fetchMissingChannelsFromPosts} from './post'; import {forceLogoutIfNecessary} from './session'; import type Model from '@nozbe/watermelondb/Model'; +import type ChannelModel from '@typings/database/models/servers/channel'; import type PostModel from '@typings/database/models/servers/post'; export async function fetchRecentMentions(serverUrl: string): Promise { @@ -129,10 +131,15 @@ export const searchPosts = async (serverUrl: string, teamId: string, params: Pos } }; -export const searchFiles = async (serverUrl: string, teamId: string, params: FileSearchParams): Promise<{files?: FileInfo[]; channels?: string[]; error?: unknown}> => { +export const searchFiles = async (serverUrl: string, teamId: string, params: FileSearchParams, channel?: ChannelModel): Promise<{files?: FileInfo[]; channels?: string[]; error?: unknown}> => { try { + let currentTeamId = teamId; + if (channel && (channel.type === General.DM_CHANNEL || channel.type === General.GM_CHANNEL)) { + const {database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + currentTeamId = await getCurrentTeamId(database); + } const client = NetworkManager.getClient(serverUrl); - const result = await client.searchFiles(teamId, params.terms); + const result = await client.searchFiles(currentTeamId, params.terms); const files = result?.file_infos ? Object.values(result.file_infos) : []; const [allChannelIds, allPostIds] = files.reduce<[Set, Set]>((acc, f) => { if (f.channel_id) { @@ -153,7 +160,9 @@ export const searchFiles = async (serverUrl: string, teamId: string, params: Fil return acc; }, {}); files.forEach((f) => { - f.postProps = idToPost[f.post_id]?.props; + if (f.post_id) { + f.postProps = idToPost[f.post_id]?.props; + } }); return {files, channels}; } catch (error) { diff --git a/app/actions/remote/team.test.ts b/app/actions/remote/team.test.ts new file mode 100644 index 00000000000..9f34f7262b0 --- /dev/null +++ b/app/actions/remote/team.test.ts @@ -0,0 +1,293 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +/* eslint-disable max-lines */ + +import {SYSTEM_IDENTIFIERS} from '@constants/database'; +import DatabaseManager from '@database/manager'; +import NetworkManager from '@managers/network_manager'; +import {getActiveServerUrl} from '@queries/app/servers'; + +import { + addCurrentUserToTeam, + addUserToTeam, + addUsersToTeam, + sendEmailInvitesToTeam, + fetchMyTeams, + fetchMyTeam, + fetchAllTeams, + fetchTeamsForComponent, + updateCanJoinTeams, + fetchTeamsChannelsAndUnreadPosts, + fetchTeamByName, + removeCurrentUserFromTeam, + removeUserFromTeam, + handleTeamChange, + handleKickFromTeam, + getTeamMembersByIds, + buildTeamIconUrl, +} from './team'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; + +const serverUrl = 'baseHandler.test.com'; +let operator: ServerDataOperator; + +const user: UserProfile = { + id: 'userid', + username: 'username', + roles: '', +} as UserProfile; + +let mockIsTablet: jest.Mock; +jest.mock('@utils/helpers', () => { + const original = jest.requireActual('@utils/helpers'); + mockIsTablet = jest.fn(() => false); + return { + ...original, + isTablet: mockIsTablet, + }; +}); + +let mockGetActiveServer: jest.Mock; +jest.mock('@queries/app/servers', () => { + const original = jest.requireActual('@queries/app/servers'); + mockGetActiveServer = jest.fn(() => false); + return { + ...original, + getActiveServer: mockGetActiveServer, + }; +}); + +jest.mock('@queries/app/servers', () => ({ + getActiveServerUrl: jest.fn(), +})); + +const channelId = 'channelid1'; +const teamId = 'teamid1'; + +const team: Team = { + id: teamId, + name: 'team1', +} as Team; + +const mockClient = { + getTeam: jest.fn((id: string) => ({id, name: 'team1'})), + getTeamMember: jest.fn((id: string, userId: string) => ({id: userId + '-' + id, user_id: userId === 'me' ? 'userid1' : userId, team_id: id, roles: ''})), + addToTeam: jest.fn((id: string, userId: string) => ({id: userId + '-' + id, user_id: userId, team_id: id, roles: ''})), + addUsersToTeamGracefully: jest.fn((id: string, userIds: string[]) => (userIds.map((userId) => ({member: {id: userId + '-' + id, user_id: userId, team_id: id, roles: ''}, error: undefined, user_id: userId})))), + sendEmailInvitesToTeamGracefully: jest.fn((id: string, emails: string[]) => (emails.map((email) => ({email, error: undefined})))), + getRolesByNames: jest.fn((roles: string[]) => roles.map((r) => ({id: r, name: r} as Role))), + getMyTeams: jest.fn(() => ([{id: teamId, name: 'team1'}])), + getMyTeamMembers: jest.fn(() => ([{id: 'userid1-' + teamId, user_id: 'userid1', team_id: teamId, roles: ''}])), + getTeams: jest.fn(() => ([{id: teamId, name: 'team1'}])), + getMyChannels: jest.fn((id: string) => ([{id: channelId, name: 'channel1', creatorId: user.id, team_id: id}])), + getMyChannelMembers: jest.fn(() => ([{id: user.id + '-' + channelId, user_id: user.id, channel_id: channelId, roles: ''}])), + getCategories: jest.fn((userId: string, id: string) => ({categories: [{id: 'categoryid', channel_id: [channelId], team_id: id}], order: ['categoryid']})), + getTeamByName: jest.fn((name: string) => ({id: teamId, name})), + removeFromTeam: jest.fn(), + getTeamMembersByIds: jest.fn((id: string, userIds: string[]) => (userIds.map((userId) => ({id: userId + '-' + id, user_id: userId, team_id: id, roles: ''})))), +}; + +beforeAll(() => { + // eslint-disable-next-line + // @ts-ignore + NetworkManager.getClient = () => mockClient; +}); + +beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; +}); + +afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); +}); + +describe('teamMember', () => { + it('addCurrentUserToTeam - handle not found database', async () => { + const result = await addCurrentUserToTeam('foo', '') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('addCurrentUserToTeam - no current user', async () => { + const result = await addCurrentUserToTeam(serverUrl, teamId); + expect(result?.error).toBeDefined(); + expect(result.error).toBe('no current user'); + }); + + it('addCurrentUserToTeam - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: user.id}, {id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + + const result = await addCurrentUserToTeam(serverUrl, teamId) as {member: TeamMembership}; + expect(result).toBeDefined(); + expect(result.member).toBeDefined(); + }); + + it('addUserToTeam - handle not found database', async () => { + const result = await addUserToTeam('foo', '', '') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('addUserToTeam - base case', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + + const result = await addUserToTeam(serverUrl, teamId, 'userid1') as {member: TeamMembership}; + expect(result).toBeDefined(); + expect(result.member).toBeDefined(); + }); + + it('addUsersToTeam - handle not found database', async () => { + const result = await addUsersToTeam('foo', '', []) as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('addUsersToTeam - base case', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + + const result = await addUsersToTeam(serverUrl, teamId, ['userid1']) as {members: TeamMemberWithError[]}; + expect(result).toBeDefined(); + expect(result.members).toBeDefined(); + }); + + it('sendEmailInvitesToTeam - base case', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + + const result = await sendEmailInvitesToTeam(serverUrl, teamId, ['user1@mattermost.com']) as {members: TeamInviteWithError[]}; + expect(result).toBeDefined(); + expect(result.members).toBeDefined(); + }); + + it('handleKickFromTeam - handle not found database', async () => { + const result = await handleKickFromTeam('foo', '') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('removeCurrentUserFromTeam - handle not found database', async () => { + const result = await removeCurrentUserFromTeam('foo', '') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('removeCurrentUserFromTeam - base case', async () => { + const result = await removeCurrentUserFromTeam(serverUrl, teamId); + expect(result).toBeDefined(); + }); + + it('removeUserFromTeam - base case', async () => { + const result = await removeUserFromTeam(serverUrl, 'userid1', teamId); + expect(result).toBeDefined(); + }); + + it('getTeamMembersByIds - handle not found database', async () => { + const result = await getTeamMembersByIds('foo', '', []) as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('getTeamMembersByIds - base case', async () => { + const result = await getTeamMembersByIds(serverUrl, teamId, ['userid1']); + expect(result).toBeDefined(); + expect(result?.members).toBeDefined(); + }); +}); + +describe('teams', () => { + it('fetchMyTeams - handle not found database', async () => { + const result = await fetchMyTeams('foo') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('fetchMyTeams - base case', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + + const result = await fetchMyTeams(serverUrl); + expect(result).toBeDefined(); + expect(result.teams).toBeDefined(); + expect(result.memberships).toBeDefined(); + }); + + it('fetchMyTeam - handle not found database', async () => { + const result = await fetchMyTeam('foo', '') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('fetchMyTeam - base case', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + + const result = await fetchMyTeam(serverUrl, teamId); + expect(result).toBeDefined(); + expect(result.teams).toBeDefined(); + expect(result.memberships).toBeDefined(); + }); + + it('fetchAllTeams - base case', async () => { + const result = await fetchAllTeams(serverUrl); + expect(result).toBeDefined(); + expect(result.teams).toBeDefined(); + }); + + it('fetchTeamsForComponent - base case', async () => { + await operator.handleTeam({teams: [team], prepareRecordsOnly: false}); + + const result = await fetchTeamsForComponent(serverUrl, 0); + expect(result).toBeDefined(); + expect(result.teams).toBeDefined(); + expect(result.hasMore).toBeFalsy(); + }); + + it('updateCanJoinTeams - handle not found database', async () => { + const result = await updateCanJoinTeams('foo') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('updateCanJoinTeams - base case', async () => { + const result = await updateCanJoinTeams(serverUrl); + expect(result).toBeDefined(); + }); + + it('fetchTeamsChannelsAndUnreadPosts - handle not found database', async () => { + const result = await fetchTeamsChannelsAndUnreadPosts('foo', 0, [], []) as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('fetchTeamsChannelsAndUnreadPosts - base case', async () => { + const result = await fetchTeamsChannelsAndUnreadPosts(serverUrl, 0, [team], [{team_id: teamId, user_id: 'userid1'} as TeamMembership]); + expect(result).toBeDefined(); + }); + + it('fetchTeamByName - handle not found database', async () => { + const result = await fetchTeamByName('foo', '') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('fetchTeamByName - base case', async () => { + const result = await fetchTeamByName(serverUrl, teamId); + expect(result).toBeDefined(); + expect(result.team).toBeDefined(); + }); + + it('handleTeamChange - handle not found database', async () => { + const result = await handleTeamChange('foo', '') as {error: unknown}; + expect(result?.error).toBeDefined(); + }); + + it('handleTeamChange - base case', async () => { + const result = await handleTeamChange(serverUrl, teamId); + expect(result).toBeDefined(); + expect(result?.error).toBeUndefined(); + }); + + it('handleKickFromTeam - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID, value: teamId}], prepareRecordsOnly: false}); + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce(serverUrl); + + const result = await handleKickFromTeam(serverUrl, teamId); + expect(result).toBeDefined(); + expect(result?.error).toBeUndefined(); + }); + + it('buildTeamIconUrl - base case', async () => { + const url = await buildTeamIconUrl(serverUrl, teamId); + expect(url).toBeDefined(); + }); +}); diff --git a/app/actions/remote/team.ts b/app/actions/remote/team.ts index bcb901e3ee0..3d62a0231ee 100644 --- a/app/actions/remote/team.ts +++ b/app/actions/remote/team.ts @@ -383,14 +383,14 @@ export const removeUserFromTeam = async (serverUrl: string, teamId: string, user export async function handleTeamChange(serverUrl: string, teamId: string) { const operator = DatabaseManager.serverDatabases[serverUrl]?.operator; if (!operator) { - return; + return {error: 'no database'}; } const {database} = operator; const currentTeamId = await getCurrentTeamId(database); if (currentTeamId === teamId) { - return; + return {}; } let channelId = ''; @@ -400,7 +400,7 @@ export async function handleTeamChange(serverUrl: string, teamId: string) { if (channelId) { await switchToChannelById(serverUrl, channelId, teamId); DeviceEventEmitter.emit(Events.TEAM_SWITCH, false); - return; + return {}; } } @@ -421,6 +421,7 @@ export async function handleTeamChange(serverUrl: string, teamId: string) { // Fetch Groups + GroupTeams fetchGroupsForTeamIfConstrained(serverUrl, teamId); + return {}; } export async function handleKickFromTeam(serverUrl: string, teamId: string) { @@ -428,7 +429,7 @@ export async function handleKickFromTeam(serverUrl: string, teamId: string) { const {database, operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); const currentTeamId = await getCurrentTeamId(database); if (currentTeamId !== teamId) { - return; + return {}; } const currentServer = await getActiveServerUrl(); @@ -444,9 +445,12 @@ export async function handleKickFromTeam(serverUrl: string, teamId: string) { await handleTeamChange(serverUrl, teamToJumpTo); } + return {}; + // Resetting to team select handled by the home screen } catch (error) { logDebug('Failed to kick user from team', error); + return {error}; } } diff --git a/app/actions/remote/user.test.ts b/app/actions/remote/user.test.ts new file mode 100644 index 00000000000..b010d0e11f4 --- /dev/null +++ b/app/actions/remote/user.test.ts @@ -0,0 +1,494 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +/* eslint-disable max-lines */ + +import {SYSTEM_IDENTIFIERS} from '@constants/database'; +import DatabaseManager from '@database/manager'; +import NetworkManager from '@managers/network_manager'; + +import { + fetchMe, + fetchProfilesInChannel, + fetchProfilesInGroupChannels, + type ProfilesInChannelRequest, + fetchProfilesPerChannels, + updateMe, + fetchUserOrGroupsByMentionNames, + fetchUsersByUsernames, + fetchStatusByIds, + fetchUsersByIds, + fetchProfiles, + fetchProfilesInTeam, + fetchProfilesNotInChannel, + searchProfiles, + fetchMissingProfilesByIds, + fetchMissingProfilesByUsernames, + updateAllUsersSince, + updateUsersNoLongerVisible, + setStatus, + updateCustomStatus, + removeRecentCustomStatus, + unsetCustomStatus, + setDefaultProfileImage, + uploadUserProfileImage, + searchUsers, + buildProfileImageUrlFromUser, + autoUpdateTimezone, + fetchTeamAndChannelMembership, + getAllSupportedTimezones, +} from './user'; + +import type ServerDataOperator from '@database/operator/server_data_operator'; + +const serverUrl = 'baseHandler.test.com'; +let operator: ServerDataOperator; + +const channelId = 'channelid1'; +const teamId = 'teamid1'; + +const team: Team = { + id: teamId, + name: 'team1', +} as Team; + +const user1 = {id: 'userid1', username: 'user1', email: 'user1@mattermost.com', roles: ''} as UserProfile; +const user2 = {id: 'userid2', username: 'user2', email: 'user2@mattermost.com', roles: ''} as UserProfile; + +const mockClient = { + getMe: jest.fn(() => ({id: 'userid1', username: 'user1', email: 'user1@mattermost.com', roles: ''})), + getStatus: jest.fn((id: string) => ({user_id: id === 'me' ? 'userid1' : id, status: 'online'})), + getProfilesInChannel: jest.fn(() => ([user1, user2])), + getProfilesInGroupChannels: jest.fn((ids: string[]) => { + const m = {} as {[x: string]: UserProfile[]}; + ids.forEach((id) => { + m[id] = [user1, user2]; + }); + return m; + }), + patchMe: jest.fn((me: UserProfile) => ({...user1, ...me})), + getProfilesByUsernames: jest.fn((usernames: string[]) => usernames.map((u: string) => ({id: u + 'id', username: u, roles: ''}))), + getStatusesByIds: jest.fn((ids: string[]) => ids.map((id) => ({user_id: id, status: 'online'}))), + getProfilesByIds: jest.fn((ids: string[]) => ids.map((id) => ({id, username: id + 'username', roles: ''}))), + getRolesByNames: jest.fn((roles: string[]) => roles.map((r) => ({id: r, name: r} as Role))), + getProfiles: jest.fn(() => [user1, user2]), + getProfilesInTeam: jest.fn(() => [user1, user2]), + getProfilesNotInChannel: jest.fn(() => [user1, user2]), + searchUsers: jest.fn(() => [user2]), + autocompleteUsers: jest.fn(() => ({users: [user2]})), + getKnownUsers: jest.fn(() => []), + updateStatus: jest.fn((status: UserStatus) => status), + updateCustomStatus: jest.fn((status: UserCustomStatus) => status), + removeRecentCustomStatus: jest.fn(), + unsetCustomStatus: jest.fn(), + setDefaultProfileImage: jest.fn(), + apiClient: { + upload: jest.fn(), + }, + getUserRoute: jest.fn((id: string) => `/users/${id}`), + getProfilePictureUrl: jest.fn(() => '/url/to/image.jpg'), + getTeamMember: jest.fn((id: string, userId: string) => ({id: userId + '-' + id, user_id: userId, team_id: id, roles: ''})), + getChannelMember: jest.fn((cid: string, userId: string) => ({id: userId + '-' + cid, user_id: userId, channel_id: cid, roles: ''})), + getTimezones: jest.fn(() => ['EST']), +}; + +beforeAll(() => { + // eslint-disable-next-line + // @ts-ignore + NetworkManager.getClient = () => mockClient; +}); + +beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + operator = DatabaseManager.serverDatabases[serverUrl]!.operator; +}); + +afterEach(async () => { + await DatabaseManager.destroyServerDatabase(serverUrl); +}); + +describe('get users', () => { + it('fetchMe - handle not found database', async () => { + const result = await fetchMe('foo'); + expect(result?.error).toBeDefined(); + }); + + it('fetchMe - handle bad user', async () => { + mockClient.getMe.mockImplementationOnce(() => ({id: 'baduserid'} as any)); + const result = await fetchMe(serverUrl); + expect(result?.error).toBeDefined(); + expect((result?.error as Error).message).toBe('User not found'); + }); + + it('fetchMe - base case', async () => { + const result = await fetchMe(serverUrl); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.user).toBeDefined(); + }); + + it('fetchProfilesInChannel - handle not found database', async () => { + const result = await fetchProfilesInChannel('foo', ''); + expect(result?.error).toBeDefined(); + }); + + it('fetchProfilesInChannel - base case', async () => { + const result = await fetchProfilesInChannel(serverUrl, channelId); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(2); // both users + }); + + it('fetchProfilesInChannel - exclude user id', async () => { + const result = await fetchProfilesInChannel(serverUrl, channelId, 'userid2'); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(1); + expect(result.users?.[0].id).toBe('userid1'); + }); + + it('fetchProfilesInGroupChannels - handle not found database', async () => { + const result = await fetchProfilesInGroupChannels('foo', []); + expect(result?.error).toBeDefined(); + }); + + it('fetchProfilesInGroupChannels - base case', async () => { + const result = await fetchProfilesInGroupChannels(serverUrl, [channelId]); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.data).toBeDefined(); + const data = result.data as ProfilesInChannelRequest[]; + expect(data.length).toBe(1); + expect(data[0].users?.length).toBe(2); + }); + + it('fetchProfilesInGroupChannels - profiles already exist', async () => { + const gmChannelMember: ChannelMembership = { + id: 'id', + user_id: user1.id, + channel_id: channelId, + msg_count: 0, + roles: '', + } as ChannelMembership; + + await operator.handleChannelMembership({channelMemberships: [gmChannelMember, {...gmChannelMember, user_id: user2.id}], prepareRecordsOnly: false}); + + const result = await fetchProfilesInGroupChannels(serverUrl, [channelId]); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.data).toBeDefined(); + expect(result.data?.length).toBe(0); + }); + + it('fetchProfilesPerChannels - handle not found database', async () => { + const result = await fetchProfilesPerChannels('foo', []); + expect(result?.error).toBeDefined(); + }); + + it('fetchProfilesPerChannels - base case', async () => { + const result = await fetchProfilesPerChannels(serverUrl, [channelId]); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.data).toBeDefined(); + const data = result.data as ProfilesInChannelRequest[]; + expect(data.length).toBe(1); + expect(data[0].users?.length).toBe(2); + }); + + it('fetchUserOrGroupsByMentionNames - handle not found database', async () => { + const result = await fetchUserOrGroupsByMentionNames('foo', []); + expect(result?.error).toBeDefined(); + }); + + it('fetchUserOrGroupsByMentionNames - base case', async () => { + const result = await fetchUserOrGroupsByMentionNames(serverUrl, ['username1']); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(1); + }); + + it('fetchUsersByUsernames - handle not found database', async () => { + const result = await fetchUsersByUsernames('foo', ['username1']); + expect(result?.error).toBeDefined(); + }); + + it('fetchUsersByUsernames - no usernames', async () => { + const result = await fetchUsersByUsernames(serverUrl, []); + expect(result?.error).toBeUndefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(0); + }); + + it('fetchUsersByUsernames - base case', async () => { + await operator.handleUsers({users: [user2], prepareRecordsOnly: false}); + + const result = await fetchUsersByUsernames(serverUrl, ['username1', 'user2']); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(1); + }); + + it('fetchUsersByIds - handle not found database', async () => { + const result = await fetchUsersByIds('foo', [user1.id]); + expect(result?.error).toBeDefined(); + }); + + it('fetchUsersByIds - no ids', async () => { + const result = await fetchUsersByIds(serverUrl, []); + expect(result?.error).toBeUndefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(0); + }); + + it('fetchUsersByIds - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: 'userid1'}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user1, user2], prepareRecordsOnly: false}); + + const result = await fetchUsersByIds(serverUrl, ['newuserid', user2.id]); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(1); + expect(result.existingUsers).toBeDefined(); + expect(result.existingUsers?.length).toBe(1); + }); + + it('fetchProfiles - handle not found database', async () => { + const result = await fetchProfiles('foo'); + expect(result?.error).toBeDefined(); + }); + + it('fetchProfiles - base case', async () => { + const result = await fetchProfiles(serverUrl); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(2); + }); + + it('fetchProfilesInTeam - handle not found database', async () => { + const result = await fetchProfilesInTeam('foo', ''); + expect(result?.error).toBeDefined(); + }); + + it('fetchProfilesInTeam - base case', async () => { + const result = await fetchProfilesInTeam(serverUrl, team.id); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(2); + }); + + it('fetchProfilesNotInChannel - handle not found database', async () => { + const result = await fetchProfilesNotInChannel('foo', '', ''); + expect(result?.error).toBeDefined(); + }); + + it('fetchProfilesNotInChannel - base case', async () => { + const result = await fetchProfilesNotInChannel(serverUrl, team.id, 'channelid1'); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(2); + }); + + it('searchProfiles - handle not found database', async () => { + const result = await searchProfiles('foo', '', {}); + expect(result?.error).toBeDefined(); + }); + + it('searchProfiles - base case', async () => { + const result = await searchProfiles(serverUrl, team.id, {}); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.data).toBeDefined(); + expect(result.data?.length).toBe(1); + }); + + it('fetchMissingProfilesByIds - base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: 'userid1'}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user1], prepareRecordsOnly: false}); + + const result = await fetchMissingProfilesByIds(serverUrl, ['newuserid']); + expect(result).toBeDefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(1); + }); + + it('fetchMissingProfilesByUsernames - base case', async () => { + await operator.handleUsers({users: [user2], prepareRecordsOnly: false}); + + const result = await fetchMissingProfilesByUsernames(serverUrl, ['username1', 'user2']); + expect(result).toBeDefined(); + expect(result.users).toBeDefined(); + expect(result.users?.length).toBe(1); + }); + + it('searchUsers - base case', async () => { + const result = await searchUsers(serverUrl, 'user2', team.id); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.users?.users).toBeDefined(); + expect(result.users?.users?.length).toBe(1); + }); + + it('buildProfileImageUrlFromUser - base case', async () => { + const result = await buildProfileImageUrlFromUser(serverUrl, user2); + expect(result).toBeDefined(); + }); + + it('fetchTeamAndChannelMembership - handle not found database', async () => { + const result = await fetchTeamAndChannelMembership('foo', '', ''); + expect(result?.error).toBeDefined(); + }); + + it('fetchTeamAndChannelMembership - base case', async () => { + const result = await fetchTeamAndChannelMembership(serverUrl, user1.id, team.id, channelId); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + }); + + it('getAllSupportedTimezones - base case', async () => { + const result = await getAllSupportedTimezones(serverUrl); + expect(result).toBeDefined(); + }); +}); + +describe('update users', () => { + it('updateMe - handle not found database', async () => { + const result = await updateMe('foo', {}); + expect(result?.error).toBeDefined(); + }); + + it('updateMe - handle base case', async () => { + const result = await updateMe(serverUrl, {...user1, username: 'username2'}); + expect(result?.error).toBeUndefined(); + expect(result?.data).toBeDefined(); + }); + + it('updateAllUsersSince - handle not found database', async () => { + const result = await updateAllUsersSince('foo', 1); + expect(result?.error).toBeDefined(); + }); + + it('updateAllUsersSince - no time', async () => { + const result = await updateAllUsersSince(serverUrl, -1); + expect(result?.userUpdates).toBeDefined(); + expect(result?.userUpdates?.length).toBe(0); + }); + + it('updateAllUsersSince - handle base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: 'userid1'}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user1, user2], prepareRecordsOnly: false}); + + const result = await updateAllUsersSince(serverUrl, 1); + expect(result?.error).toBeUndefined(); + expect(result?.userUpdates).toBeDefined(); + expect(result?.userUpdates?.length).toBe(1); + }); + + it('updateUsersNoLongerVisible - handle not found database', async () => { + const result = await updateUsersNoLongerVisible('foo'); + expect(result?.error).toBeDefined(); + }); + + it('updateUsersNoLongerVisible - handle base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: 'userid1'}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user1, user2], prepareRecordsOnly: false}); + + const result = await updateUsersNoLongerVisible(serverUrl); + expect(result?.error).toBeUndefined(); + expect(result?.models).toBeDefined(); + expect(result?.models?.length).toBe(1); + }); + + it('setDefaultProfileImage - base case', async () => { + const result = await setDefaultProfileImage(serverUrl, user1.id); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + }); + + it('uploadUserProfileImage - handle not found database', async () => { + const result = await uploadUserProfileImage('foo', ''); + expect(result?.error).toBeDefined(); + }); + + it('uploadUserProfileImage - handle base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: 'userid1'}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user1], prepareRecordsOnly: false}); + + const result = await uploadUserProfileImage(serverUrl, '/path/to/image'); + expect(result?.error).toBeUndefined(); + }); + + it('autoUpdateTimezone - handle not found database', async () => { + const result = await autoUpdateTimezone('foo'); + expect(result?.error).toBeDefined(); + }); + + it('autoUpdateTimezone - no current user', async () => { + const result = await autoUpdateTimezone(serverUrl); + expect(result?.error).toBeUndefined(); + }); + + it('autoUpdateTimezone - handle base case', async () => { + await operator.handleSystem({systems: [{id: SYSTEM_IDENTIFIERS.CURRENT_USER_ID, value: 'userid1'}], prepareRecordsOnly: false}); + await operator.handleUsers({users: [user1], prepareRecordsOnly: false}); + + const result = await autoUpdateTimezone(serverUrl); + expect(result?.error).toBeUndefined(); + }); +}); + +describe('user status', () => { + it('fetchStatusByIds - handle not found database', async () => { + const result = await fetchStatusByIds('foo', [user1.id]); + expect(result?.error).toBeDefined(); + }); + + it('fetchStatusByIds - no ids', async () => { + const result = await fetchStatusByIds(serverUrl, []); + expect(result?.error).toBeUndefined(); + expect(result.statuses).toBeDefined(); + expect(result.statuses?.length).toBe(0); + }); + + it('fetchStatusByIds - base case', async () => { + await operator.handleUsers({users: [user1, user2], prepareRecordsOnly: false}); + + const result = await fetchStatusByIds(serverUrl, [user1.id]); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.statuses).toBeDefined(); + expect(result.statuses?.length).toBe(1); + }); + + it('setStatus - base case', async () => { + const result = await setStatus(serverUrl, {user_id: user1.id, status: 'online'} as UserStatus); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + expect(result.data).toBeDefined(); + }); + + it('updateCustomStatus - base case', async () => { + const result = await updateCustomStatus(serverUrl, {text: 'custom status'} as UserCustomStatus); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + }); + + it('removeRecentCustomStatus - base case', async () => { + const result = await removeRecentCustomStatus(serverUrl, {text: 'custom status'} as UserCustomStatus); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + }); + + it('unsetCustomStatus - base case', async () => { + const result = await unsetCustomStatus(serverUrl); + expect(result).toBeDefined(); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/app/actions/remote/user.ts b/app/actions/remote/user.ts index a3144f4bc48..ee683d28eed 100644 --- a/app/actions/remote/user.ts +++ b/app/actions/remote/user.ts @@ -295,7 +295,7 @@ const debouncedFetchUserOrGroupsByMentionNames = debounce( ); const notFoundMentions: {[serverUrl: string]: Set} = {}; -const fetchUserOrGroupsByMentionNames = async (serverUrl: string, mentions: string[]) => { +export const fetchUserOrGroupsByMentionNames = async (serverUrl: string, mentions: string[]) => { try { if (!notFoundMentions[serverUrl]) { notFoundMentions[serverUrl] = new Set(); @@ -332,7 +332,7 @@ const fetchUserOrGroupsByMentionNames = async (serverUrl: string, mentions: stri } } } - return {}; + return {users: fetchedUsers}; } catch (error) { logDebug('error on fetchUserOrGroupsByMentionNames', getFullErrorMessage(error)); return {error}; @@ -651,13 +651,13 @@ export async function updateAllUsersSince(serverUrl: string, since: number, fetc await operator.batchRecords(modelsToBatch, 'updateAllUsersSince'); } + + return {userUpdates}; } catch (error) { logDebug('error on updateAllUsersSince', getFullErrorMessage(error)); - - // Do nothing + forceLogoutIfNecessary(serverUrl, error); + return {error}; } - - return {users: userUpdates}; } export async function updateUsersNoLongerVisible(serverUrl: string, prepareRecordsOnly = false): Promise<{error?: unknown; models?: Model[]}> { @@ -807,13 +807,13 @@ export const autoUpdateTimezone = async (serverUrl: string) => { const result = DatabaseManager.getServerDatabaseAndOperator(serverUrl); database = result.database; } catch (e) { - return; + return {error: e}; } const currentUser = await getCurrentUser(database); if (!currentUser) { - return; + return {}; } // Set timezone @@ -826,6 +826,8 @@ export const autoUpdateTimezone = async (serverUrl: string) => { const timezone = {useAutomaticTimezone: 'true', automaticTimezone: deviceTimezone, manualTimezone: currentTimezone.manualTimezone}; await updateMe(serverUrl, {timezone}); } + + return {}; }; export const fetchTeamAndChannelMembership = async (serverUrl: string, userId: string, teamId: string, channelId?: string) => { diff --git a/app/actions/websocket/event.ts b/app/actions/websocket/event.ts new file mode 100644 index 00000000000..fa4aedd86f3 --- /dev/null +++ b/app/actions/websocket/event.ts @@ -0,0 +1,298 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import * as bookmark from '@actions/local/channel_bookmark'; +import * as calls from '@calls/connection/websocket_event_handlers'; +import {WebsocketEvents} from '@constants'; + +import * as category from './category'; +import * as channel from './channel'; +import * as group from './group'; +import {handleOpenDialogEvent} from './integrations'; +import * as posts from './posts'; +import * as preferences from './preferences'; +import {handleAddCustomEmoji, handleReactionRemovedFromPostEvent, handleReactionAddedToPostEvent} from './reactions'; +import {handleUserRoleUpdatedEvent, handleTeamMemberRoleUpdatedEvent, handleRoleUpdatedEvent} from './roles'; +import {handleLicenseChangedEvent, handleConfigChangedEvent} from './system'; +import * as teams from './teams'; +import {handleThreadUpdatedEvent, handleThreadReadChangedEvent, handleThreadFollowChangedEvent} from './threads'; +import {handleUserUpdatedEvent, handleUserTypingEvent, handleStatusChangedEvent} from './users'; + +export async function handleWebSocketEvent(serverUrl: string, msg: WebSocketMessage) { + switch (msg.event) { + case WebsocketEvents.POSTED: + case WebsocketEvents.EPHEMERAL_MESSAGE: + posts.handleNewPostEvent(serverUrl, msg); + break; + case WebsocketEvents.POST_EDITED: + posts.handlePostEdited(serverUrl, msg); + break; + case WebsocketEvents.POST_DELETED: + posts.handlePostDeleted(serverUrl, msg); + break; + case WebsocketEvents.POST_UNREAD: + posts.handlePostUnread(serverUrl, msg); + break; + case WebsocketEvents.POST_ACKNOWLEDGEMENT_ADDED: + posts.handlePostAcknowledgementAdded(serverUrl, msg); + break; + case WebsocketEvents.POST_ACKNOWLEDGEMENT_REMOVED: + posts.handlePostAcknowledgementRemoved(serverUrl, msg); + break; + + case WebsocketEvents.LEAVE_TEAM: + teams.handleLeaveTeamEvent(serverUrl, msg); + break; + case WebsocketEvents.UPDATE_TEAM: + teams.handleUpdateTeamEvent(serverUrl, msg); + break; + case WebsocketEvents.ADDED_TO_TEAM: + teams.handleUserAddedToTeamEvent(serverUrl, msg); + break; + case WebsocketEvents.DELETE_TEAM: + teams.handleTeamArchived(serverUrl, msg); + break; + case WebsocketEvents.RESTORE_TEAM: + teams.handleTeamRestored(serverUrl, msg); + break; + + case WebsocketEvents.USER_ADDED: + channel.handleUserAddedToChannelEvent(serverUrl, msg); + break; + case WebsocketEvents.USER_REMOVED: + channel.handleUserRemovedFromChannelEvent(serverUrl, msg); + break; + case WebsocketEvents.USER_UPDATED: + handleUserUpdatedEvent(serverUrl, msg); + break; + case WebsocketEvents.ROLE_UPDATED: + handleRoleUpdatedEvent(serverUrl, msg); + break; + case WebsocketEvents.USER_ROLE_UPDATED: + handleUserRoleUpdatedEvent(serverUrl, msg); + break; + case WebsocketEvents.MEMBERROLE_UPDATED: + handleTeamMemberRoleUpdatedEvent(serverUrl, msg); + break; + + case WebsocketEvents.CATEGORY_CREATED: + category.handleCategoryCreatedEvent(serverUrl, msg); + break; + case WebsocketEvents.CATEGORY_UPDATED: + category.handleCategoryUpdatedEvent(serverUrl, msg); + break; + case WebsocketEvents.CATEGORY_ORDER_UPDATED: + category.handleCategoryOrderUpdatedEvent(serverUrl, msg); + break; + case WebsocketEvents.CATEGORY_DELETED: + category.handleCategoryDeletedEvent(serverUrl, msg); + break; + + case WebsocketEvents.CHANNEL_CREATED: + channel.handleChannelCreatedEvent(serverUrl, msg); + break; + case WebsocketEvents.CHANNEL_DELETED: + channel.handleChannelDeletedEvent(serverUrl, msg); + break; + case WebsocketEvents.CHANNEL_UNARCHIVED: + channel.handleChannelUnarchiveEvent(serverUrl, msg); + break; + case WebsocketEvents.CHANNEL_UPDATED: + channel.handleChannelUpdatedEvent(serverUrl, msg); + break; + case WebsocketEvents.CHANNEL_CONVERTED: + channel.handleChannelConvertedEvent(serverUrl, msg); + break; + case WebsocketEvents.CHANNEL_VIEWED: + channel.handleChannelViewedEvent(serverUrl, msg); + break; + case WebsocketEvents.MULTIPLE_CHANNELS_VIEWED: + channel.handleMultipleChannelsViewedEvent(serverUrl, msg); + break; + case WebsocketEvents.CHANNEL_MEMBER_UPDATED: + channel.handleChannelMemberUpdatedEvent(serverUrl, msg); + break; + case WebsocketEvents.CHANNEL_SCHEME_UPDATED: + // Do nothing, handled by CHANNEL_UPDATED due to changes in the channel scheme. + break; + case WebsocketEvents.DIRECT_ADDED: + case WebsocketEvents.GROUP_ADDED: + channel.handleDirectAddedEvent(serverUrl, msg); + break; + + case WebsocketEvents.PREFERENCE_CHANGED: + preferences.handlePreferenceChangedEvent(serverUrl, msg); + break; + case WebsocketEvents.PREFERENCES_CHANGED: + preferences.handlePreferencesChangedEvent(serverUrl, msg); + break; + case WebsocketEvents.PREFERENCES_DELETED: + preferences.handlePreferencesDeletedEvent(serverUrl, msg); + break; + + case WebsocketEvents.STATUS_CHANGED: + handleStatusChangedEvent(serverUrl, msg); + break; + case WebsocketEvents.TYPING: + handleUserTypingEvent(serverUrl, msg); + break; + + case WebsocketEvents.REACTION_ADDED: + handleReactionAddedToPostEvent(serverUrl, msg); + break; + case WebsocketEvents.REACTION_REMOVED: + handleReactionRemovedFromPostEvent(serverUrl, msg); + break; + case WebsocketEvents.EMOJI_ADDED: + handleAddCustomEmoji(serverUrl, msg); + break; + + case WebsocketEvents.LICENSE_CHANGED: + handleLicenseChangedEvent(serverUrl, msg); + break; + case WebsocketEvents.CONFIG_CHANGED: + handleConfigChangedEvent(serverUrl, msg); + break; + + case WebsocketEvents.OPEN_DIALOG: + handleOpenDialogEvent(serverUrl, msg); + break; + case WebsocketEvents.APPS_FRAMEWORK_REFRESH_BINDINGS: + break; + + case WebsocketEvents.THREAD_UPDATED: + handleThreadUpdatedEvent(serverUrl, msg); + break; + case WebsocketEvents.THREAD_READ_CHANGED: + handleThreadReadChangedEvent(serverUrl, msg); + break; + case WebsocketEvents.THREAD_FOLLOW_CHANGED: + handleThreadFollowChangedEvent(serverUrl, msg); + break; + + // Calls ws events: + case WebsocketEvents.CALLS_CHANNEL_ENABLED: + calls.handleCallChannelEnabled(serverUrl, msg); + break; + case WebsocketEvents.CALLS_CHANNEL_DISABLED: + calls.handleCallChannelDisabled(serverUrl, msg); + break; + + // DEPRECATED in favour of user_joined (since v0.21.0) + case WebsocketEvents.CALLS_USER_CONNECTED: + calls.handleCallUserConnected(serverUrl, msg); + break; + + // DEPRECATED in favour of user_left (since v0.21.0) + case WebsocketEvents.CALLS_USER_DISCONNECTED: + calls.handleCallUserDisconnected(serverUrl, msg); + break; + + case WebsocketEvents.CALLS_USER_JOINED: + calls.handleCallUserJoined(serverUrl, msg); + break; + case WebsocketEvents.CALLS_USER_LEFT: + calls.handleCallUserLeft(serverUrl, msg); + break; + case WebsocketEvents.CALLS_USER_MUTED: + calls.handleCallUserMuted(serverUrl, msg); + break; + case WebsocketEvents.CALLS_USER_UNMUTED: + calls.handleCallUserUnmuted(serverUrl, msg); + break; + case WebsocketEvents.CALLS_USER_VOICE_ON: + calls.handleCallUserVoiceOn(msg); + break; + case WebsocketEvents.CALLS_USER_VOICE_OFF: + calls.handleCallUserVoiceOff(msg); + break; + case WebsocketEvents.CALLS_CALL_START: + calls.handleCallStarted(serverUrl, msg); + break; + case WebsocketEvents.CALLS_SCREEN_ON: + calls.handleCallScreenOn(serverUrl, msg); + break; + case WebsocketEvents.CALLS_SCREEN_OFF: + calls.handleCallScreenOff(serverUrl, msg); + break; + case WebsocketEvents.CALLS_USER_RAISE_HAND: + calls.handleCallUserRaiseHand(serverUrl, msg); + break; + case WebsocketEvents.CALLS_USER_UNRAISE_HAND: + calls.handleCallUserUnraiseHand(serverUrl, msg); + break; + case WebsocketEvents.CALLS_CALL_END: + calls.handleCallEnded(serverUrl, msg); + break; + case WebsocketEvents.CALLS_USER_REACTED: + calls.handleCallUserReacted(serverUrl, msg); + break; + + // DEPRECATED in favour of CALLS_JOB_STATE (since v2.15.0) + case WebsocketEvents.CALLS_RECORDING_STATE: + calls.handleCallRecordingState(serverUrl, msg); + break; + case WebsocketEvents.CALLS_JOB_STATE: + calls.handleCallJobState(serverUrl, msg); + break; + case WebsocketEvents.CALLS_HOST_CHANGED: + calls.handleCallHostChanged(serverUrl, msg); + break; + case WebsocketEvents.CALLS_USER_DISMISSED_NOTIFICATION: + calls.handleUserDismissedNotification(serverUrl, msg); + break; + case WebsocketEvents.CALLS_CAPTION: + calls.handleCallCaption(serverUrl, msg); + break; + case WebsocketEvents.CALLS_HOST_MUTE: + calls.handleHostMute(serverUrl, msg); + break; + case WebsocketEvents.CALLS_HOST_LOWER_HAND: + calls.handleHostLowerHand(serverUrl, msg); + break; + case WebsocketEvents.CALLS_HOST_REMOVED: + calls.handleHostRemoved(serverUrl, msg); + break; + case WebsocketEvents.CALLS_CALL_STATE: + calls.handleCallState(serverUrl, msg); + break; + case WebsocketEvents.GROUP_RECEIVED: + group.handleGroupReceivedEvent(serverUrl, msg); + break; + case WebsocketEvents.GROUP_MEMBER_ADD: + group.handleGroupMemberAddEvent(serverUrl, msg); + break; + case WebsocketEvents.GROUP_MEMBER_DELETE: + group.handleGroupMemberDeleteEvent(serverUrl, msg); + break; + case WebsocketEvents.GROUP_ASSOCIATED_TO_TEAM: + group.handleGroupTeamAssociatedEvent(serverUrl, msg); + break; + case WebsocketEvents.GROUP_DISSOCIATED_TO_TEAM: + group.handleGroupTeamDissociateEvent(serverUrl, msg); + break; + case WebsocketEvents.GROUP_ASSOCIATED_TO_CHANNEL: + break; + case WebsocketEvents.GROUP_DISSOCIATED_TO_CHANNEL: + break; + + // Plugins + case WebsocketEvents.PLUGIN_STATUSES_CHANGED: + case WebsocketEvents.PLUGIN_ENABLED: + case WebsocketEvents.PLUGIN_DISABLED: + // Do nothing, this event doesn't need logic in the mobile app + break; + + // bookmarks + case WebsocketEvents.CHANNEL_BOOKMARK_CREATED: + case WebsocketEvents.CHANNEL_BOOKMARK_DELETED: + bookmark.handleBookmarkAddedOrDeleted(serverUrl, msg); + break; + case WebsocketEvents.CHANNEL_BOOKMARK_UPDATED: + bookmark.handleBookmarkEdited(serverUrl, msg); + break; + case WebsocketEvents.CHANNEL_BOOKMARK_SORTED: + bookmark.handleBookmarkSorted(serverUrl, msg); + break; + } +} diff --git a/app/actions/websocket/index.ts b/app/actions/websocket/index.ts index 0d5cec0e89d..39177ce7447 100644 --- a/app/actions/websocket/index.ts +++ b/app/actions/websocket/index.ts @@ -8,40 +8,14 @@ import { deferredAppEntryActions, entry, handleEntryAfterLoadNavigation, - registerDeviceToken, + setExtraSessionProps, } from '@actions/remote/entry/common'; import {fetchPostsForChannel, fetchPostThread} from '@actions/remote/post'; import {openAllUnreadChannels} from '@actions/remote/preference'; import {autoUpdateTimezone} from '@actions/remote/user'; import {loadConfigAndCalls} from '@calls/actions/calls'; -import { - handleCallCaption, - handleCallChannelDisabled, - handleCallChannelEnabled, - handleCallEnded, - handleCallHostChanged, - handleCallJobState, - handleCallRecordingState, - handleCallScreenOff, - handleCallScreenOn, - handleCallStarted, handleCallUserConnected, handleCallUserDisconnected, - handleCallUserJoined, - handleCallUserLeft, - handleCallUserMuted, - handleCallUserRaiseHand, - handleCallUserReacted, - handleCallUserUnmuted, - handleCallUserUnraiseHand, - handleCallUserVoiceOff, - handleCallUserVoiceOn, - handleHostLowerHand, - handleHostMute, - handleHostRemoved, - handleUserDismissedNotification, -} from '@calls/connection/websocket_event_handlers'; import {isSupportedServerCalls} from '@calls/utils'; -import {Screens, WebsocketEvents} from '@constants'; -import {SYSTEM_IDENTIFIERS} from '@constants/database'; +import {Screens} from '@constants'; import DatabaseManager from '@database/manager'; import AppsManager from '@managers/apps_manager'; import {getActiveServerUrl} from '@queries/app/servers'; @@ -51,8 +25,8 @@ import { getCurrentChannelId, getCurrentTeamId, getLicense, - getWebSocketLastDisconnected, - resetWebSocketLastDisconnected, + getLastFullSync, + setLastFullSync, } from '@queries/servers/system'; import {getIsCRTEnabled} from '@queries/servers/thread'; import {getCurrentUser} from '@queries/servers/user'; @@ -62,60 +36,8 @@ import {setTeamLoading} from '@store/team_load_store'; import {isTablet} from '@utils/helpers'; import {logDebug, logInfo} from '@utils/log'; -import { - handleCategoryCreatedEvent, - handleCategoryDeletedEvent, - handleCategoryOrderUpdatedEvent, - handleCategoryUpdatedEvent, -} from './category'; -import { - handleChannelConvertedEvent, handleChannelCreatedEvent, - handleChannelDeletedEvent, - handleChannelMemberUpdatedEvent, - handleChannelUnarchiveEvent, - handleChannelUpdatedEvent, - handleChannelViewedEvent, - handleMultipleChannelsViewedEvent, - handleDirectAddedEvent, - handleUserAddedToChannelEvent, - handleUserRemovedFromChannelEvent, -} from './channel'; -import { - handleGroupMemberAddEvent, - handleGroupMemberDeleteEvent, - handleGroupReceivedEvent, - handleGroupTeamAssociatedEvent, - handleGroupTeamDissociateEvent, -} from './group'; -import {handleOpenDialogEvent} from './integrations'; -import { - handleNewPostEvent, - handlePostAcknowledgementAdded, - handlePostAcknowledgementRemoved, - handlePostDeleted, - handlePostEdited, - handlePostUnread, -} from './posts'; -import { - handlePreferenceChangedEvent, - handlePreferencesChangedEvent, - handlePreferencesDeletedEvent, -} from './preferences'; -import {handleAddCustomEmoji, handleReactionRemovedFromPostEvent, handleReactionAddedToPostEvent} from './reactions'; -import {handleUserRoleUpdatedEvent, handleTeamMemberRoleUpdatedEvent, handleRoleUpdatedEvent} from './roles'; -import {handleLicenseChangedEvent, handleConfigChangedEvent} from './system'; -import { - handleLeaveTeamEvent, - handleUserAddedToTeamEvent, - handleUpdateTeamEvent, - handleTeamArchived, - handleTeamRestored, -} from './teams'; -import {handleThreadUpdatedEvent, handleThreadReadChangedEvent, handleThreadFollowChangedEvent} from './threads'; -import {handleUserUpdatedEvent, handleUserTypingEvent, handleStatusChangedEvent} from './users'; - export async function handleFirstConnect(serverUrl: string) { - registerDeviceToken(serverUrl); + setExtraSessionProps(serverUrl); autoUpdateTimezone(serverUrl); return doReconnect(serverUrl); } @@ -124,22 +46,6 @@ export async function handleReconnect(serverUrl: string) { return doReconnect(serverUrl); } -export async function handleClose(serverUrl: string, lastDisconnect: number) { - const operator = DatabaseManager.serverDatabases[serverUrl]?.operator; - if (!operator) { - return; - } - await operator.handleSystem({ - systems: [ - { - id: SYSTEM_IDENTIFIERS.WEBSOCKET, - value: lastDisconnect.toString(10), - }, - ], - prepareRecordsOnly: false, - }); -} - async function doReconnect(serverUrl: string) { const operator = DatabaseManager.serverDatabases[serverUrl]?.operator; if (!operator) { @@ -153,14 +59,14 @@ async function doReconnect(serverUrl: string) { const {database} = operator; - const lastDisconnectedAt = await getWebSocketLastDisconnected(database); - resetWebSocketLastDisconnected(operator); + const lastFullSync = await getLastFullSync(database); + const now = Date.now(); const currentTeamId = await getCurrentTeamId(database); const currentChannelId = await getCurrentChannelId(database); setTeamLoading(serverUrl, true); - const entryData = await entry(serverUrl, currentTeamId, currentChannelId, lastDisconnectedAt); + const entryData = await entry(serverUrl, currentTeamId, currentChannelId, lastFullSync); if ('error' in entryData) { setTeamLoading(serverUrl, false); return entryData.error; @@ -174,6 +80,8 @@ async function doReconnect(serverUrl: string) { await operator.batchRecords(models, 'doReconnect'); } + await setLastFullSync(operator, now); + const tabletDevice = isTablet(); const isActiveServer = (await getActiveServerUrl()) === serverUrl; if (isActiveServer && tabletDevice && initialChannelId === currentChannelId) { @@ -194,7 +102,7 @@ async function doReconnect(serverUrl: string) { loadConfigAndCalls(serverUrl, currentUserId); } - await deferredAppEntryActions(serverUrl, lastDisconnectedAt, currentUserId, currentUserLocale, prefData.preferences, config, license, teamData, chData, initialTeamId); + await deferredAppEntryActions(serverUrl, lastFullSync, currentUserId, currentUserLocale, prefData.preferences, config, license, teamData, chData, initialTeamId); openAllUnreadChannels(serverUrl); @@ -204,297 +112,6 @@ async function doReconnect(serverUrl: string) { return undefined; } -export async function handleEvent(serverUrl: string, msg: WebSocketMessage) { - switch (msg.event) { - case WebsocketEvents.POSTED: - case WebsocketEvents.EPHEMERAL_MESSAGE: - handleNewPostEvent(serverUrl, msg); - break; - - case WebsocketEvents.POST_EDITED: - handlePostEdited(serverUrl, msg); - break; - - case WebsocketEvents.POST_DELETED: - handlePostDeleted(serverUrl, msg); - break; - - case WebsocketEvents.POST_UNREAD: - handlePostUnread(serverUrl, msg); - break; - - case WebsocketEvents.POST_ACKNOWLEDGEMENT_ADDED: - handlePostAcknowledgementAdded(serverUrl, msg); - break; - case WebsocketEvents.POST_ACKNOWLEDGEMENT_REMOVED: - handlePostAcknowledgementRemoved(serverUrl, msg); - break; - - case WebsocketEvents.LEAVE_TEAM: - handleLeaveTeamEvent(serverUrl, msg); - break; - case WebsocketEvents.UPDATE_TEAM: - handleUpdateTeamEvent(serverUrl, msg); - break; - case WebsocketEvents.ADDED_TO_TEAM: - handleUserAddedToTeamEvent(serverUrl, msg); - break; - - case WebsocketEvents.USER_ADDED: - handleUserAddedToChannelEvent(serverUrl, msg); - break; - case WebsocketEvents.USER_REMOVED: - handleUserRemovedFromChannelEvent(serverUrl, msg); - break; - case WebsocketEvents.USER_UPDATED: - handleUserUpdatedEvent(serverUrl, msg); - break; - case WebsocketEvents.ROLE_UPDATED: - handleRoleUpdatedEvent(serverUrl, msg); - break; - - case WebsocketEvents.USER_ROLE_UPDATED: - handleUserRoleUpdatedEvent(serverUrl, msg); - break; - - case WebsocketEvents.MEMBERROLE_UPDATED: - handleTeamMemberRoleUpdatedEvent(serverUrl, msg); - break; - - case WebsocketEvents.CATEGORY_CREATED: - handleCategoryCreatedEvent(serverUrl, msg); - break; - case WebsocketEvents.CATEGORY_UPDATED: - handleCategoryUpdatedEvent(serverUrl, msg); - break; - case WebsocketEvents.CATEGORY_ORDER_UPDATED: - handleCategoryOrderUpdatedEvent(serverUrl, msg); - break; - case WebsocketEvents.CATEGORY_DELETED: - handleCategoryDeletedEvent(serverUrl, msg); - break; - - case WebsocketEvents.CHANNEL_CREATED: - handleChannelCreatedEvent(serverUrl, msg); - break; - - case WebsocketEvents.CHANNEL_DELETED: - handleChannelDeletedEvent(serverUrl, msg); - break; - case WebsocketEvents.CHANNEL_UNARCHIVED: - handleChannelUnarchiveEvent(serverUrl, msg); - break; - - case WebsocketEvents.CHANNEL_UPDATED: - handleChannelUpdatedEvent(serverUrl, msg); - break; - - case WebsocketEvents.CHANNEL_CONVERTED: - handleChannelConvertedEvent(serverUrl, msg); - break; - - case WebsocketEvents.CHANNEL_VIEWED: - handleChannelViewedEvent(serverUrl, msg); - break; - - case WebsocketEvents.MULTIPLE_CHANNELS_VIEWED: - handleMultipleChannelsViewedEvent(serverUrl, msg); - break; - - case WebsocketEvents.CHANNEL_MEMBER_UPDATED: - handleChannelMemberUpdatedEvent(serverUrl, msg); - break; - - case WebsocketEvents.CHANNEL_SCHEME_UPDATED: - // Do nothing, handled by CHANNEL_UPDATED due to changes in the channel scheme. - break; - - case WebsocketEvents.DIRECT_ADDED: - case WebsocketEvents.GROUP_ADDED: - handleDirectAddedEvent(serverUrl, msg); - break; - - case WebsocketEvents.PREFERENCE_CHANGED: - handlePreferenceChangedEvent(serverUrl, msg); - break; - - case WebsocketEvents.PREFERENCES_CHANGED: - handlePreferencesChangedEvent(serverUrl, msg); - break; - - case WebsocketEvents.PREFERENCES_DELETED: - handlePreferencesDeletedEvent(serverUrl, msg); - break; - - case WebsocketEvents.STATUS_CHANGED: - handleStatusChangedEvent(serverUrl, msg); - break; - case WebsocketEvents.TYPING: - handleUserTypingEvent(serverUrl, msg); - break; - - case WebsocketEvents.REACTION_ADDED: - handleReactionAddedToPostEvent(serverUrl, msg); - break; - - case WebsocketEvents.REACTION_REMOVED: - handleReactionRemovedFromPostEvent(serverUrl, msg); - break; - - case WebsocketEvents.EMOJI_ADDED: - handleAddCustomEmoji(serverUrl, msg); - break; - - case WebsocketEvents.LICENSE_CHANGED: - handleLicenseChangedEvent(serverUrl, msg); - break; - - case WebsocketEvents.CONFIG_CHANGED: - handleConfigChangedEvent(serverUrl, msg); - break; - - case WebsocketEvents.OPEN_DIALOG: - handleOpenDialogEvent(serverUrl, msg); - break; - - case WebsocketEvents.DELETE_TEAM: - handleTeamArchived(serverUrl, msg); - break; - - case WebsocketEvents.RESTORE_TEAM: - handleTeamRestored(serverUrl, msg); - break; - - case WebsocketEvents.THREAD_UPDATED: - handleThreadUpdatedEvent(serverUrl, msg); - break; - - case WebsocketEvents.THREAD_READ_CHANGED: - handleThreadReadChangedEvent(serverUrl, msg); - break; - - case WebsocketEvents.THREAD_FOLLOW_CHANGED: - handleThreadFollowChangedEvent(serverUrl, msg); - break; - - case WebsocketEvents.APPS_FRAMEWORK_REFRESH_BINDINGS: - break; - - // return dispatch(handleRefreshAppsBindings()); - - // Calls ws events: - case WebsocketEvents.CALLS_CHANNEL_ENABLED: - handleCallChannelEnabled(serverUrl, msg); - break; - case WebsocketEvents.CALLS_CHANNEL_DISABLED: - handleCallChannelDisabled(serverUrl, msg); - break; - - // DEPRECATED in favour of user_joined (since v0.21.0) - case WebsocketEvents.CALLS_USER_CONNECTED: - handleCallUserConnected(serverUrl, msg); - break; - - // DEPRECATED in favour of user_left (since v0.21.0) - case WebsocketEvents.CALLS_USER_DISCONNECTED: - handleCallUserDisconnected(serverUrl, msg); - break; - - case WebsocketEvents.CALLS_USER_JOINED: - handleCallUserJoined(serverUrl, msg); - break; - case WebsocketEvents.CALLS_USER_LEFT: - handleCallUserLeft(serverUrl, msg); - break; - case WebsocketEvents.CALLS_USER_MUTED: - handleCallUserMuted(serverUrl, msg); - break; - case WebsocketEvents.CALLS_USER_UNMUTED: - handleCallUserUnmuted(serverUrl, msg); - break; - case WebsocketEvents.CALLS_USER_VOICE_ON: - handleCallUserVoiceOn(msg); - break; - case WebsocketEvents.CALLS_USER_VOICE_OFF: - handleCallUserVoiceOff(msg); - break; - case WebsocketEvents.CALLS_CALL_START: - handleCallStarted(serverUrl, msg); - break; - case WebsocketEvents.CALLS_SCREEN_ON: - handleCallScreenOn(serverUrl, msg); - break; - case WebsocketEvents.CALLS_SCREEN_OFF: - handleCallScreenOff(serverUrl, msg); - break; - case WebsocketEvents.CALLS_USER_RAISE_HAND: - handleCallUserRaiseHand(serverUrl, msg); - break; - case WebsocketEvents.CALLS_USER_UNRAISE_HAND: - handleCallUserUnraiseHand(serverUrl, msg); - break; - case WebsocketEvents.CALLS_CALL_END: - handleCallEnded(serverUrl, msg); - break; - case WebsocketEvents.CALLS_USER_REACTED: - handleCallUserReacted(serverUrl, msg); - break; - - // DEPRECATED in favour of CALLS_JOB_STATE (since v2.15.0) - case WebsocketEvents.CALLS_RECORDING_STATE: - handleCallRecordingState(serverUrl, msg); - break; - case WebsocketEvents.CALLS_JOB_STATE: - handleCallJobState(serverUrl, msg); - break; - case WebsocketEvents.CALLS_HOST_CHANGED: - handleCallHostChanged(serverUrl, msg); - break; - case WebsocketEvents.CALLS_USER_DISMISSED_NOTIFICATION: - handleUserDismissedNotification(serverUrl, msg); - break; - case WebsocketEvents.CALLS_CAPTION: - handleCallCaption(serverUrl, msg); - break; - case WebsocketEvents.CALLS_HOST_MUTE: - handleHostMute(serverUrl, msg); - break; - case WebsocketEvents.CALLS_HOST_LOWER_HAND: - handleHostLowerHand(serverUrl, msg); - break; - case WebsocketEvents.CALLS_HOST_REMOVED: - handleHostRemoved(serverUrl, msg); - break; - - case WebsocketEvents.GROUP_RECEIVED: - handleGroupReceivedEvent(serverUrl, msg); - break; - case WebsocketEvents.GROUP_MEMBER_ADD: - handleGroupMemberAddEvent(serverUrl, msg); - break; - case WebsocketEvents.GROUP_MEMBER_DELETE: - handleGroupMemberDeleteEvent(serverUrl, msg); - break; - case WebsocketEvents.GROUP_ASSOCIATED_TO_TEAM: - handleGroupTeamAssociatedEvent(serverUrl, msg); - break; - case WebsocketEvents.GROUP_DISSOCIATED_TO_TEAM: - handleGroupTeamDissociateEvent(serverUrl, msg); - break; - case WebsocketEvents.GROUP_ASSOCIATED_TO_CHANNEL: - break; - case WebsocketEvents.GROUP_DISSOCIATED_TO_CHANNEL: - break; - - // Plugins - case WebsocketEvents.PLUGIN_STATUSES_CHANGED: - case WebsocketEvents.PLUGIN_ENABLED: - case WebsocketEvents.PLUGIN_DISABLED: - // Do nothing, this event doesn't need logic in the mobile app - break; - } -} - async function fetchPostDataIfNeeded(serverUrl: string) { try { const isActiveServer = (await getActiveServerUrl()) === serverUrl; diff --git a/app/client/rest/base.ts b/app/client/rest/base.ts index 343cf8f3d36..0240d3f6761 100644 --- a/app/client/rest/base.ts +++ b/app/client/rest/base.ts @@ -6,7 +6,6 @@ import {DeviceEventEmitter} from 'react-native'; import {Events, Calls} from '@constants'; import {t} from '@i18n'; import {setServerCredentials} from '@init/credentials'; -import {Analytics, create} from '@managers/analytics'; import {semverFromServerVersion} from '@utils/server'; import * as ClientConstants from './constants'; @@ -20,7 +19,6 @@ import type { } from '@mattermost/react-native-network-client'; export default class ClientBase { - analytics: Analytics|undefined; apiClient: APIClientInterface; csrfToken = ''; requestHeaders: {[x: string]: string} = {}; @@ -30,7 +28,6 @@ export default class ClientBase { constructor(apiClient: APIClientInterface, serverUrl: string, bearerToken?: string, csrfToken?: string) { this.apiClient = apiClient; - this.analytics = create(serverUrl); if (bearerToken) { this.setBearerToken(bearerToken); @@ -134,6 +131,14 @@ export default class ClientBase { return `${this.getChannelsRoute()}/${channelId}`; } + getChannelBookmarksRoute(channelId: string) { + return `${this.getChannelRoute(channelId)}/bookmarks`; + } + + getChannelBookmarkRoute(channelId: string, bookmarkId: string) { + return `${this.getChannelBookmarksRoute(channelId)}/${bookmarkId}`; + } + getSharedChannelsRoute() { return `${this.urlVersion}/sharedchannels`; } @@ -226,6 +231,10 @@ export default class ClientBase { return this.getPluginRoute(Calls.PluginId); } + getPerformanceRoute() { + return `${this.urlVersion}/client_perf`; + } + doFetch = async (url: string, options: ClientOptions, returnDataOnly = true) => { let request; const method = options.method?.toLowerCase(); diff --git a/app/client/rest/channel_bookmark.ts b/app/client/rest/channel_bookmark.ts new file mode 100644 index 00000000000..07dd0a27e7a --- /dev/null +++ b/app/client/rest/channel_bookmark.ts @@ -0,0 +1,68 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {buildQueryString} from '@utils/helpers'; + +import type ClientBase from './base'; + +export interface ClientChannelBookmarksMix { + createChannelBookmark(channelId: string, bookmark: ChannelBookmark, connectionId?: string): Promise; + updateChannelBookmark(channelId: string, bookmark: ChannelBookmark, connectionId?: string): Promise; + updateChannelBookmarkSortOrder(channelId: string, bookmarkId: string, newSortOrder: number, connectionId?: string): Promise; + deleteChannelBookmark(channelId: string, bookmarkId: string, connectionId?: string): Promise; + getChannelBookmarksForChannel(channelId: string, since: number): Promise; +} + +const ClientChannelBookmarks = >(superclass: TBase) => class extends superclass { + createChannelBookmark = async (channelId: string, bookmark: ChannelBookmark, connectionId = '') => { + return this.doFetch( + this.getChannelBookmarksRoute(channelId), + { + method: 'post', + body: bookmark, + headers: {'Connection-Id': connectionId}, + }, + ); + }; + + updateChannelBookmark(channelId: string, bookmark: ChannelBookmark, connectionId?: string) { + return this.doFetch( + this.getChannelBookmarkRoute(channelId, bookmark.id), + { + method: 'patch', + body: bookmark, + headers: {'Connection-Id': connectionId}, + }, + ); + } + + updateChannelBookmarkSortOrder(channelId: string, bookmarkId: string, newSortOrder: number, connectionId?: string) { + return this.doFetch( + `${this.getChannelBookmarkRoute(channelId, bookmarkId)}/sort_order`, + { + method: 'post', + body: newSortOrder, + headers: {'Connection-Id': connectionId}, + }, + ); + } + + deleteChannelBookmark(channelId: string, bookmarkId: string, connectionId?: string) { + return this.doFetch( + this.getChannelBookmarkRoute(channelId, bookmarkId), + { + method: 'delete', + headers: {'Connection-Id': connectionId}, + }, + ); + } + + getChannelBookmarksForChannel(channelId: string, since: number) { + return this.doFetch( + `${this.getChannelBookmarksRoute(channelId)}${buildQueryString({bookmarks_since: since})}`, + {method: 'get'}, + ); + } +}; + +export default ClientChannelBookmarks; diff --git a/app/client/rest/channels.ts b/app/client/rest/channels.ts index 80577f97375..2d909b80b68 100644 --- a/app/client/rest/channels.ts +++ b/app/client/rest/channels.ts @@ -64,8 +64,6 @@ const ClientChannels = >(superclass: TBase }; createChannel = async (channel: Channel) => { - this.analytics?.trackAPI('api_channels_create', {team_id: channel.team_id}); - return this.doFetch( `${this.getChannelsRoute()}`, {method: 'post', body: channel}, @@ -73,8 +71,6 @@ const ClientChannels = >(superclass: TBase }; createDirectChannel = async (userIds: string[]) => { - this.analytics?.trackAPI('api_channels_create_direct'); - return this.doFetch( `${this.getChannelsRoute()}/direct`, {method: 'post', body: userIds}, @@ -82,8 +78,6 @@ const ClientChannels = >(superclass: TBase }; createGroupChannel = async (userIds: string[]) => { - this.analytics?.trackAPI('api_channels_create_group'); - return this.doFetch( `${this.getChannelsRoute()}/group`, {method: 'post', body: userIds}, @@ -91,8 +85,6 @@ const ClientChannels = >(superclass: TBase }; deleteChannel = async (channelId: string) => { - this.analytics?.trackAPI('api_channels_delete', {channel_id: channelId}); - return this.doFetch( `${this.getChannelRoute(channelId)}`, {method: 'delete'}, @@ -100,8 +92,6 @@ const ClientChannels = >(superclass: TBase }; unarchiveChannel = async (channelId: string) => { - this.analytics?.trackAPI('api_channels_unarchive', {channel_id: channelId}); - return this.doFetch( `${this.getChannelRoute(channelId)}/restore`, {method: 'post'}, @@ -109,8 +99,6 @@ const ClientChannels = >(superclass: TBase }; updateChannel = async (channel: Channel) => { - this.analytics?.trackAPI('api_channels_update', {channel_id: channel.id}); - return this.doFetch( `${this.getChannelRoute(channel.id)}`, {method: 'put', body: channel}, @@ -122,8 +110,6 @@ const ClientChannels = >(superclass: TBase }; updateChannelPrivacy = async (channelId: string, privacy: any) => { - this.analytics?.trackAPI('api_channels_update_privacy', {channel_id: channelId, privacy}); - return this.doFetch( `${this.getChannelRoute(channelId)}/privacy`, {method: 'put', body: {privacy}}, @@ -131,8 +117,6 @@ const ClientChannels = >(superclass: TBase }; patchChannel = async (channelId: string, channelPatch: ChannelPatch) => { - this.analytics?.trackAPI('api_channels_patch', {channel_id: channelId}); - return this.doFetch( `${this.getChannelRoute(channelId)}/patch`, {method: 'put', body: channelPatch}, @@ -140,8 +124,6 @@ const ClientChannels = >(superclass: TBase }; updateChannelNotifyProps = async (props: ChannelNotifyProps & {channel_id: string; user_id: string}) => { - this.analytics?.trackAPI('api_users_update_channel_notifications', {channel_id: props.channel_id}); - return this.doFetch( `${this.getChannelMemberRoute(props.channel_id, props.user_id)}/notify_props`, {method: 'put', body: props}, @@ -149,24 +131,22 @@ const ClientChannels = >(superclass: TBase }; getChannel = async (channelId: string) => { - this.analytics?.trackAPI('api_channel_get', {channel_id: channelId}); - return this.doFetch( - `${this.getChannelRoute(channelId)}`, + this.getChannelRoute(channelId), {method: 'get'}, ); }; getChannelByName = async (teamId: string, channelName: string, includeDeleted = false) => { return this.doFetch( - `${this.getTeamRoute(teamId)}/channels/name/${channelName}?include_deleted=${includeDeleted}`, + `${this.getTeamRoute(teamId)}/channels/name/${channelName}${buildQueryString({ + include_deleted: includeDeleted, + })}`, {method: 'get'}, ); }; getChannelByNameAndTeamName = async (teamName: string, channelName: string, includeDeleted = false) => { - this.analytics?.trackAPI('api_channel_get_by_name_and_teamName', {channel_name: channelName, team_name: teamName, include_deleted: includeDeleted}); - return this.doFetch( `${this.getTeamNameRoute(teamName)}/channels/name/${channelName}?include_deleted=${includeDeleted}`, {method: 'get'}, @@ -175,14 +155,20 @@ const ClientChannels = >(superclass: TBase getChannels = async (teamId: string, page = 0, perPage = PER_PAGE_DEFAULT) => { return this.doFetch( - `${this.getTeamRoute(teamId)}/channels${buildQueryString({page, per_page: perPage})}`, + `${this.getTeamRoute(teamId)}/channels${buildQueryString({ + page, + per_page: perPage, + })}`, {method: 'get'}, ); }; getArchivedChannels = async (teamId: string, page = 0, perPage = PER_PAGE_DEFAULT) => { return this.doFetch( - `${this.getTeamRoute(teamId)}/channels/deleted${buildQueryString({page, per_page: perPage})}`, + `${this.getTeamRoute(teamId)}/channels/deleted${buildQueryString({ + page, + per_page: perPage, + })}`, {method: 'get'}, ); }; @@ -194,11 +180,11 @@ const ClientChannels = >(superclass: TBase ); }; - getMyChannels = async (teamId: string, includeDeleted = false, lastDeleteAt = 0) => { + getMyChannels = async (teamId: string, includeDeleted = false, since = 0) => { return this.doFetch( `${this.getUserRoute('me')}/teams/${teamId}/channels${buildQueryString({ include_deleted: includeDeleted, - last_delete_at: lastDeleteAt, + last_delete_at: since, })}`, {method: 'get'}, ); @@ -247,8 +233,6 @@ const ClientChannels = >(superclass: TBase }; addToChannel = async (userId: string, channelId: string, postRootId = '') => { - this.analytics?.trackAPI('api_channels_add_member', {channel_id: channelId}); - const member = {user_id: userId, channel_id: channelId, post_root_id: postRootId}; return this.doFetch( `${this.getChannelMembersRoute(channelId)}`, @@ -257,8 +241,6 @@ const ClientChannels = >(superclass: TBase }; removeFromChannel = async (userId: string, channelId: string) => { - this.analytics?.trackAPI('api_channels_remove_member', {channel_id: channelId}); - return this.doFetch( `${this.getChannelMemberRoute(channelId, userId)}`, {method: 'delete'}, diff --git a/app/client/rest/files.ts b/app/client/rest/files.ts index 0c849c1de35..d899acdf0cc 100644 --- a/app/client/rest/files.ts +++ b/app/client/rest/files.ts @@ -11,13 +11,14 @@ export interface ClientFilesMix { getFileThumbnailUrl: (fileId: string, timestamp: number) => string; getFilePreviewUrl: (fileId: string, timestamp: number) => string; getFilePublicLink: (fileId: string) => Promise<{link: string}>; - uploadPostAttachment: ( - file: FileInfo, + uploadAttachment: ( + file: FileInfo | ExtractedFileInfo, channelId: string, onProgress: (fractionCompleted: number, bytesRead?: number | null | undefined) => void, onComplete: (response: ClientResponse) => void, onError: (response: ClientResponseError) => void, skipBytes?: number, + isBookmark?: boolean, ) => () => void; searchFiles: (teamId: string, terms: string) => Promise; searchFilesWithParams: (teamId: string, FileSearchParams: string) => Promise; @@ -58,15 +59,19 @@ const ClientFiles = >(superclass: TBase) = ); }; - uploadPostAttachment = ( - file: FileInfo, + uploadAttachment = ( + file: FileInfo | ExtractedFileInfo, channelId: string, onProgress: (fractionCompleted: number, bytesRead?: number | null | undefined) => void, onComplete: (response: ClientResponse) => void, onError: (response: ClientResponseError) => void, skipBytes = 0, + isBookmark = false, ) => { - const url = this.getFilesRoute(); + let url = this.getFilesRoute(); + if (isBookmark) { + url = `${url}?bookmark=true`; + } const options: UploadRequestOptions = { skipBytes, method: 'POST', @@ -87,7 +92,6 @@ const ClientFiles = >(superclass: TBase) = }; searchFilesWithParams = async (teamId: string, params: FileSearchParams) => { - this.analytics?.trackAPI('api_files_search'); const endpoint = teamId ? `${this.getTeamRoute(teamId)}/files/search` : `${this.getFilesRoute()}/search`; return this.doFetch(endpoint, {method: 'post', body: params}); }; diff --git a/app/client/rest/general.ts b/app/client/rest/general.ts index c84f470864c..76d85a9cf93 100644 --- a/app/client/rest/general.ts +++ b/app/client/rest/general.ts @@ -24,6 +24,7 @@ export interface ClientGeneralMix { getChannelDataRetentionPolicies: (userId: string, page?: number, perPage?: number) => Promise>; getRolesByNames: (rolesNames: string[]) => Promise; getRedirectLocation: (urlParam: string) => Promise>; + sendPerformanceReport: (batch: PerformanceReport) => Promise<{}>; } const ClientGeneral = >(superclass: TBase) => class extends superclass { @@ -111,6 +112,13 @@ const ClientGeneral = >(superclass: TBase) const url = `${this.getRedirectLocationRoute()}${buildQueryString({url: urlParam})}`; return this.doFetch(url, {method: 'get'}); }; + + sendPerformanceReport = async (report: PerformanceReport) => { + return this.doFetch( + this.getPerformanceRoute(), + {method: 'post', body: report}, + ); + }; }; export default ClientGeneral; diff --git a/app/client/rest/index.ts b/app/client/rest/index.ts index 382afcbfd73..e023d8ca359 100644 --- a/app/client/rest/index.ts +++ b/app/client/rest/index.ts @@ -8,6 +8,7 @@ import mix from '@utils/mix'; import ClientApps, {type ClientAppsMix} from './apps'; import ClientBase from './base'; import ClientCategories, {type ClientCategoriesMix} from './categories'; +import ClientChannelBookmarks, {type ClientChannelBookmarksMix} from './channel_bookmark'; import ClientChannels, {type ClientChannelsMix} from './channels'; import {DEFAULT_LIMIT_AFTER, DEFAULT_LIMIT_BEFORE, HEADER_X_VERSION_ID} from './constants'; import ClientEmojis, {type ClientEmojisMix} from './emojis'; @@ -29,6 +30,7 @@ interface Client extends ClientBase, ClientAppsMix, ClientCategoriesMix, ClientChannelsMix, + ClientChannelBookmarksMix, ClientEmojisMix, ClientFilesMix, ClientGeneralMix, @@ -49,6 +51,7 @@ class Client extends mix(ClientBase).with( ClientApps, ClientCategories, ClientChannels, + ClientChannelBookmarks, ClientEmojis, ClientFiles, ClientGeneral, diff --git a/app/client/rest/integrations.ts b/app/client/rest/integrations.ts index 2ef8df304a9..854a3637895 100644 --- a/app/client/rest/integrations.ts +++ b/app/client/rest/integrations.ts @@ -39,8 +39,6 @@ const ClientIntegrations = >(superclass: T }; executeCommand = async (command: string, commandArgs = {}) => { - this.analytics?.trackAPI('api_integrations_used'); - return this.doFetch( `${this.getCommandsRoute()}/execute`, {method: 'post', body: {command, ...commandArgs}}, @@ -48,8 +46,6 @@ const ClientIntegrations = >(superclass: T }; addCommand = async (command: Command) => { - this.analytics?.trackAPI('api_integrations_created'); - return this.doFetch( `${this.getCommandsRoute()}`, {method: 'post', body: command}, @@ -57,7 +53,6 @@ const ClientIntegrations = >(superclass: T }; submitInteractiveDialog = async (data: DialogSubmission) => { - this.analytics?.trackAPI('api_interactive_messages_dialog_submitted'); return this.doFetch( `${this.urlVersion}/actions/dialogs/submit`, {method: 'post', body: data}, diff --git a/app/client/rest/posts.ts b/app/client/rest/posts.ts index 2347d200e68..3da9abaedbb 100644 --- a/app/client/rest/posts.ts +++ b/app/client/rest/posts.ts @@ -37,12 +37,6 @@ export interface ClientPostsMix { const ClientPosts = >(superclass: TBase) => class extends superclass { createPost = async (post: Post) => { - this.analytics?.trackAPI('api_posts_create', {channel_id: post.channel_id}); - - if (post.root_id != null && post.root_id !== '') { - this.analytics?.trackAPI('api_posts_replied', {channel_id: post.channel_id}); - } - return this.doFetch( `${this.getPostsRoute()}`, {method: 'post', body: post, noRetry: true}, @@ -50,8 +44,6 @@ const ClientPosts = >(superclass: TBase) = }; updatePost = async (post: Post) => { - this.analytics?.trackAPI('api_posts_update', {channel_id: post.channel_id}); - return this.doFetch( `${this.getPostRoute(post.id)}`, {method: 'put', body: post}, @@ -66,8 +58,6 @@ const ClientPosts = >(superclass: TBase) = }; patchPost = async (postPatch: Partial & {id: string}) => { - this.analytics?.trackAPI('api_posts_patch', {channel_id: postPatch.channel_id}); - return this.doFetch( `${this.getPostRoute(postPatch.id)}/patch`, {method: 'put', body: postPatch}, @@ -75,8 +65,6 @@ const ClientPosts = >(superclass: TBase) = }; deletePost = async (postId: string) => { - this.analytics?.trackAPI('api_posts_delete'); - return this.doFetch( `${this.getPostRoute(postId)}`, {method: 'delete'}, @@ -114,8 +102,6 @@ const ClientPosts = >(superclass: TBase) = }; getPostsBefore = async (channelId: string, postId = '', page = 0, perPage = PER_PAGE_DEFAULT, collapsedThreads = false, collapsedThreadsExtended = false) => { - this.analytics?.trackAPI('api_posts_get_before', {channel_id: channelId}); - return this.doFetch( `${this.getChannelRoute(channelId)}/posts${buildQueryString({before: postId, page, per_page: perPage, collapsedThreads, collapsedThreadsExtended})}`, {method: 'get'}, @@ -123,8 +109,6 @@ const ClientPosts = >(superclass: TBase) = }; getPostsAfter = async (channelId: string, postId: string, page = 0, perPage = PER_PAGE_DEFAULT, collapsedThreads = false, collapsedThreadsExtended = false) => { - this.analytics?.trackAPI('api_posts_get_after', {channel_id: channelId}); - return this.doFetch( `${this.getChannelRoute(channelId)}/posts${buildQueryString({after: postId, page, per_page: perPage, collapsedThreads, collapsedThreadsExtended})}`, {method: 'get'}, @@ -139,8 +123,6 @@ const ClientPosts = >(superclass: TBase) = }; getSavedPosts = async (userId: string, channelId = '', teamId = '', page = 0, perPage = PER_PAGE_DEFAULT) => { - this.analytics?.trackAPI('api_posts_get_flagged', {team_id: teamId}); - return this.doFetch( `${this.getUserRoute(userId)}/posts/flagged${buildQueryString({channel_id: channelId, team_id: teamId, page, per_page: perPage})}`, {method: 'get'}, @@ -148,7 +130,6 @@ const ClientPosts = >(superclass: TBase) = }; getPinnedPosts = async (channelId: string) => { - this.analytics?.trackAPI('api_posts_get_pinned', {channel_id: channelId}); return this.doFetch( `${this.getChannelRoute(channelId)}/pinned`, {method: 'get'}, @@ -156,8 +137,6 @@ const ClientPosts = >(superclass: TBase) = }; markPostAsUnread = async (userId: string, postId: string) => { - this.analytics?.trackAPI('api_post_set_unread_post'); - // collapsed_threads_supported is not based on user preferences but to know if "CLIENT" supports CRT const body = JSON.stringify({collapsed_threads_supported: true}); @@ -168,8 +147,6 @@ const ClientPosts = >(superclass: TBase) = }; pinPost = async (postId: string) => { - this.analytics?.trackAPI('api_posts_pin'); - return this.doFetch( `${this.getPostRoute(postId)}/pin`, {method: 'post'}, @@ -177,8 +154,6 @@ const ClientPosts = >(superclass: TBase) = }; unpinPost = async (postId: string) => { - this.analytics?.trackAPI('api_posts_unpin'); - return this.doFetch( `${this.getPostRoute(postId)}/unpin`, {method: 'post'}, @@ -186,8 +161,6 @@ const ClientPosts = >(superclass: TBase) = }; addReaction = async (userId: string, postId: string, emojiName: string) => { - this.analytics?.trackAPI('api_reactions_save', {post_id: postId}); - return this.doFetch( `${this.getReactionsRoute()}`, {method: 'post', body: {user_id: userId, post_id: postId, emoji_name: emojiName}}, @@ -195,8 +168,6 @@ const ClientPosts = >(superclass: TBase) = }; removeReaction = async (userId: string, postId: string, emojiName: string) => { - this.analytics?.trackAPI('api_reactions_delete', {post_id: postId}); - return this.doFetch( `${this.getUserRoute(userId)}/posts/${postId}/reactions/${emojiName}`, {method: 'delete'}, @@ -211,7 +182,6 @@ const ClientPosts = >(superclass: TBase) = }; searchPostsWithParams = async (teamId: string, params: PostSearchParams) => { - this.analytics?.trackAPI('api_posts_search'); const endpoint = teamId ? `${this.getTeamRoute(teamId)}/posts/search` : `${this.getPostsRoute()}/search`; return this.doFetch(endpoint, {method: 'post', body: params}); }; @@ -225,12 +195,6 @@ const ClientPosts = >(superclass: TBase) = }; doPostActionWithCookie = async (postId: string, actionId: string, actionCookie: string, selectedOption = '') => { - if (selectedOption) { - this.analytics?.trackAPI('api_interactive_messages_menu_selected'); - } else { - this.analytics?.trackAPI('api_interactive_messages_button_clicked'); - } - const msg: any = { selected_option: selectedOption, }; diff --git a/app/client/rest/preferences.ts b/app/client/rest/preferences.ts index f6a9893d40c..16adfb0b88c 100644 --- a/app/client/rest/preferences.ts +++ b/app/client/rest/preferences.ts @@ -11,7 +11,6 @@ export interface ClientPreferencesMix { const ClientPreferences = >(superclass: TBase) => class extends superclass { savePreferences = async (userId: string, preferences: PreferenceType[]) => { - this.analytics?.trackAPI('action_posts_flag'); return this.doFetch( `${this.getPreferencesRoute(userId)}`, {method: 'put', body: preferences}, @@ -26,7 +25,6 @@ const ClientPreferences = >(superclass: TB }; deletePreferences = async (userId: string, preferences: PreferenceType[]) => { - this.analytics?.trackAPI('action_posts_unflag'); return this.doFetch( `${this.getPreferencesRoute(userId)}/delete`, {method: 'post', body: preferences}, diff --git a/app/client/rest/teams.ts b/app/client/rest/teams.ts index 8398351a42b..cd6f802906c 100644 --- a/app/client/rest/teams.ts +++ b/app/client/rest/teams.ts @@ -32,8 +32,6 @@ export interface ClientTeamsMix { const ClientTeams = >(superclass: TBase) => class extends superclass { createTeam = async (team: Team) => { - this.analytics?.trackAPI('api_teams_create'); - return this.doFetch( `${this.getTeamsRoute()}`, {method: 'post', body: team}, @@ -41,8 +39,6 @@ const ClientTeams = >(superclass: TBase) = }; deleteTeam = async (teamId: string) => { - this.analytics?.trackAPI('api_teams_delete'); - return this.doFetch( `${this.getTeamRoute(teamId)}`, {method: 'delete'}, @@ -50,8 +46,6 @@ const ClientTeams = >(superclass: TBase) = }; updateTeam = async (team: Team) => { - this.analytics?.trackAPI('api_teams_update_name', {team_id: team.id}); - return this.doFetch( `${this.getTeamRoute(team.id)}`, {method: 'put', body: team}, @@ -59,8 +53,6 @@ const ClientTeams = >(superclass: TBase) = }; patchTeam = async (team: Partial & {id: string}) => { - this.analytics?.trackAPI('api_teams_patch_name', {team_id: team.id}); - return this.doFetch( `${this.getTeamRoute(team.id)}/patch`, {method: 'put', body: team}, @@ -82,8 +74,6 @@ const ClientTeams = >(superclass: TBase) = }; getTeamByName = async (teamName: string) => { - this.analytics?.trackAPI('api_teams_get_team_by_name'); - return this.doFetch( this.getTeamNameRoute(teamName), {method: 'get'}, @@ -133,8 +123,6 @@ const ClientTeams = >(superclass: TBase) = }; addToTeam = async (teamId: string, userId: string) => { - this.analytics?.trackAPI('api_teams_invite_members', {team_id: teamId}); - const member = {user_id: userId, team_id: teamId}; return this.doFetch( `${this.getTeamMembersRoute(teamId)}`, @@ -143,8 +131,6 @@ const ClientTeams = >(superclass: TBase) = }; addUsersToTeamGracefully = (teamId: string, userIds: string[]) => { - this.analytics?.trackAPI('api_teams_batch_add_members', {team_id: teamId, count: userIds.length}); - const members: Array<{team_id: string; user_id: string}> = []; userIds.forEach((id) => members.push({team_id: teamId, user_id: id})); @@ -155,8 +141,6 @@ const ClientTeams = >(superclass: TBase) = }; sendEmailInvitesToTeamGracefully = (teamId: string, emails: string[]) => { - this.analytics?.trackAPI('api_teams_invite_members', {team_id: teamId}); - return this.doFetch( `${this.getTeamRoute(teamId)}/invite/email?graceful=true`, {method: 'post', body: emails}, @@ -172,8 +156,6 @@ const ClientTeams = >(superclass: TBase) = }; removeFromTeam = async (teamId: string, userId: string) => { - this.analytics?.trackAPI('api_teams_remove_members', {team_id: teamId}); - return this.doFetch( `${this.getTeamMemberRoute(teamId, userId)}`, {method: 'delete'}, diff --git a/app/client/rest/users.ts b/app/client/rest/users.ts index 047c1051d1d..79eeef851ef 100644 --- a/app/client/rest/users.ts +++ b/app/client/rest/users.ts @@ -38,7 +38,7 @@ export interface ClientUsersMix { autocompleteUsers: (name: string, teamId: string, channelId?: string, options?: Record) => Promise<{users: UserProfile[]; out_of_channel?: UserProfile[]}>; getSessions: (userId: string) => Promise; checkUserMfa: (loginId: string) => Promise<{mfa_required: boolean}>; - attachDevice: (deviceId: string) => Promise; + setExtraSessionProps: (deviceId: string, notificationsEnabled: boolean, version: string | null) => Promise<{}>; searchUsers: (term: string, options: SearchUserOptions) => Promise; getStatusesByIds: (userIds: string[]) => Promise; getStatus: (userId: string) => Promise; @@ -50,8 +50,6 @@ export interface ClientUsersMix { const ClientUsers = >(superclass: TBase) => class extends superclass { createUser = async (user: UserProfile, token: string, inviteId: string) => { - this.analytics?.trackAPI('api_users_create'); - const queryParams: any = {}; if (token) { @@ -76,8 +74,6 @@ const ClientUsers = >(superclass: TBase) = }; patchUser = async (userPatch: Partial & {id: string}) => { - this.analytics?.trackAPI('api_users_patch'); - return this.doFetch( `${this.getUserRoute(userPatch.id)}/patch`, {method: 'put', body: userPatch}, @@ -85,8 +81,6 @@ const ClientUsers = >(superclass: TBase) = }; updateUser = async (user: UserProfile) => { - this.analytics?.trackAPI('api_users_update'); - return this.doFetch( `${this.getUserRoute(user.id)}`, {method: 'put', body: user}, @@ -94,8 +88,6 @@ const ClientUsers = >(superclass: TBase) = }; demoteUserToGuest = async (userId: string) => { - this.analytics?.trackAPI('api_users_demote_user_to_guest'); - return this.doFetch( `${this.getUserRoute(userId)}/demote`, {method: 'post'}, @@ -103,8 +95,6 @@ const ClientUsers = >(superclass: TBase) = }; getKnownUsers = async () => { - this.analytics?.trackAPI('api_get_known_users'); - return this.doFetch( `${this.getUsersRoute()}/known`, {method: 'get'}, @@ -112,8 +102,6 @@ const ClientUsers = >(superclass: TBase) = }; sendPasswordResetEmail = async (email: string) => { - this.analytics?.trackAPI('api_users_send_password_reset'); - return this.doFetch( `${this.getUsersRoute()}/password/reset/send`, {method: 'post', body: {email}}, @@ -121,8 +109,6 @@ const ClientUsers = >(superclass: TBase) = }; setDefaultProfileImage = async (userId: string) => { - this.analytics?.trackAPI('api_users_set_default_profile_picture'); - return this.doFetch( `${this.getUserRoute(userId)}/image`, {method: 'delete'}, @@ -130,12 +116,6 @@ const ClientUsers = >(superclass: TBase) = }; login = async (loginId: string, password: string, token = '', deviceId = '', ldapOnly = false) => { - this.analytics?.trackAPI('api_users_login'); - - if (ldapOnly) { - this.analytics?.trackAPI('api_users_login_ldap'); - } - const body: any = { device_id: deviceId, login_id: loginId, @@ -161,7 +141,6 @@ const ClientUsers = >(superclass: TBase) = }; loginById = async (id: string, password: string, token = '', deviceId = '') => { - this.analytics?.trackAPI('api_users_login'); const body: any = { device_id: deviceId, id, @@ -183,8 +162,6 @@ const ClientUsers = >(superclass: TBase) = }; logout = async () => { - this.analytics?.trackAPI('api_users_logout'); - const response = await this.doFetch( `${this.getUsersRoute()}/logout`, {method: 'post'}, @@ -194,8 +171,6 @@ const ClientUsers = >(superclass: TBase) = }; getProfiles = async (page = 0, perPage = PER_PAGE_DEFAULT, options = {}) => { - this.analytics?.trackAPI('api_profiles_get'); - return this.doFetch( `${this.getUsersRoute()}${buildQueryString({page, per_page: perPage, ...options})}`, {method: 'get'}, @@ -203,8 +178,6 @@ const ClientUsers = >(superclass: TBase) = }; getProfilesByIds = async (userIds: string[], options = {}) => { - this.analytics?.trackAPI('api_profiles_get_by_ids'); - return this.doFetch( `${this.getUsersRoute()}/ids${buildQueryString(options)}`, {method: 'post', body: userIds}, @@ -212,8 +185,6 @@ const ClientUsers = >(superclass: TBase) = }; getProfilesByUsernames = async (usernames: string[]) => { - this.analytics?.trackAPI('api_profiles_get_by_usernames'); - return this.doFetch( `${this.getUsersRoute()}/usernames`, {method: 'post', body: usernames}, @@ -221,8 +192,6 @@ const ClientUsers = >(superclass: TBase) = }; getProfilesInTeam = async (teamId: string, page = 0, perPage = PER_PAGE_DEFAULT, sort = '', options = {}) => { - this.analytics?.trackAPI('api_profiles_get_in_team', {team_id: teamId, sort}); - return this.doFetch( `${this.getUsersRoute()}${buildQueryString({...options, in_team: teamId, page, per_page: perPage, sort})}`, {method: 'get'}, @@ -230,8 +199,6 @@ const ClientUsers = >(superclass: TBase) = }; getProfilesNotInTeam = async (teamId: string, groupConstrained: boolean, page = 0, perPage = PER_PAGE_DEFAULT) => { - this.analytics?.trackAPI('api_profiles_get_not_in_team', {team_id: teamId, group_constrained: groupConstrained}); - const queryStringObj: any = {not_in_team: teamId, page, per_page: perPage}; if (groupConstrained) { queryStringObj.group_constrained = true; @@ -244,8 +211,6 @@ const ClientUsers = >(superclass: TBase) = }; getProfilesWithoutTeam = async (page = 0, perPage = PER_PAGE_DEFAULT, options = {}) => { - this.analytics?.trackAPI('api_profiles_get_without_team'); - return this.doFetch( `${this.getUsersRoute()}${buildQueryString({...options, without_team: 1, page, per_page: perPage})}`, {method: 'get'}, @@ -253,8 +218,6 @@ const ClientUsers = >(superclass: TBase) = }; getProfilesInChannel = async (channelId: string, options: GetUsersOptions) => { - this.analytics?.trackAPI('api_profiles_get_in_channel', {channel_id: channelId}); - const queryStringObj = {in_channel: channelId, ...options}; return this.doFetch( `${this.getUsersRoute()}${buildQueryString(queryStringObj)}`, @@ -263,8 +226,6 @@ const ClientUsers = >(superclass: TBase) = }; getProfilesInGroupChannels = async (channelsIds: string[]) => { - this.analytics?.trackAPI('api_profiles_get_in_group_channels', {channelsIds}); - return this.doFetch( `${this.getUsersRoute()}/group_channels`, {method: 'post', body: channelsIds}, @@ -272,8 +233,6 @@ const ClientUsers = >(superclass: TBase) = }; getProfilesNotInChannel = async (teamId: string, channelId: string, groupConstrained: boolean, page = 0, perPage = PER_PAGE_DEFAULT) => { - this.analytics?.trackAPI('api_profiles_get_not_in_channel', {team_id: teamId, channel_id: channelId, group_constrained: groupConstrained}); - const queryStringObj: any = {in_team: teamId, not_in_channel: channelId, page, per_page: perPage}; if (groupConstrained) { queryStringObj.group_constrained = true; @@ -366,16 +325,21 @@ const ClientUsers = >(superclass: TBase) = ); }; - attachDevice = async (deviceId: string) => { + setExtraSessionProps = async (deviceId: string, deviceNotificationDisabled: boolean, version: string | null) => { return this.doFetch( `${this.getUsersRoute()}/sessions/device`, - {method: 'put', body: {device_id: deviceId}}, + { + method: 'put', + body: { + device_id: deviceId, + device_notification_disabled: deviceNotificationDisabled ? 'true' : 'false', + mobile_version: version || '', + }, + }, ); }; searchUsers = async (term: string, options: any) => { - this.analytics?.trackAPI('api_search_users'); - return this.doFetch( `${this.getUsersRoute()}/search`, {method: 'post', body: {term, ...options}}, diff --git a/app/client/websocket/index.ts b/app/client/websocket/index.ts index 54ed13c05d1..0b98f06179b 100644 --- a/app/client/websocket/index.ts +++ b/app/client/websocket/index.ts @@ -9,62 +9,58 @@ import DatabaseManager from '@database/manager'; import {getConfigValue} from '@queries/servers/system'; import {hasReliableWebsocket} from '@utils/config'; import {toMilliseconds} from '@utils/datetime'; -import {logError, logInfo, logWarning} from '@utils/log'; +import {logDebug, logError, logInfo, logWarning} from '@utils/log'; const MAX_WEBSOCKET_FAILS = 7; const WEBSOCKET_TIMEOUT = toMilliseconds({seconds: 30}); const MIN_WEBSOCKET_RETRY_TIME = toMilliseconds({seconds: 3}); const MAX_WEBSOCKET_RETRY_TIME = toMilliseconds({minutes: 5}); +const DEFAULT_OPTIONS = { + forceConnection: true, +}; +const TLS_HANDSHARE_ERROR = 1015; export default class WebSocketClient { private conn?: WebSocketClientInterface; private connectionTimeout: NodeJS.Timeout | undefined; - private connectionId: string; + private connectionId = ''; private token: string; + private stop = false; + private url = ''; + private serverUrl: string; + private connectFailCount = 0; + + // The first time we connect to a server (on init or login) + // we do the sync out of the websocket lifecycle. + // This is used to avoid calling twice to the sync logic. + private shouldSkipSync = false; // responseSequence is the number to track a response sent // via the websocket. A response will always have the same sequence number // as the request. - private responseSequence: number; + private responseSequence = 1; // serverSequence is the incrementing sequence number from the // server-sent event stream. - private serverSequence: number; - private connectFailCount: number; + private serverSequence = 0; + + // Callbacks private eventCallback?: Function; private firstConnectCallback?: () => void; private missedEventsCallback?: () => void; private reconnectCallback?: () => void; private reliableReconnectCallback?: () => void; private errorCallback?: Function; - private closeCallback?: (connectFailCount: number, lastDisconnect: number) => void; + private closeCallback?: (connectFailCount: number) => void; private connectingCallback?: () => void; - private stop: boolean; - private lastConnect: number; - private lastDisconnect: number; - private url = ''; - private serverUrl: string; - private hasReliablyReconnect = false; - - constructor(serverUrl: string, token: string, lastDisconnect = 0) { - this.connectionId = ''; + constructor(serverUrl: string, token: string) { this.token = token; - this.responseSequence = 1; - this.serverSequence = 0; - this.connectFailCount = 0; - this.stop = false; this.serverUrl = serverUrl; - this.lastConnect = 0; - this.lastDisconnect = lastDisconnect; } - public async initialize(opts = {}) { - const defaults = { - forceConnection: true, - }; - - const {forceConnection} = Object.assign({}, defaults, opts); + public async initialize(opts = {}, shouldSkipSync = false) { + const {forceConnection} = Object.assign({}, DEFAULT_OPTIONS, opts); if (forceConnection) { this.stop = false; @@ -114,17 +110,19 @@ export default class WebSocketClient { // Manually changing protocol since getOrCreateWebsocketClient does not accept http/s if (this.url.startsWith('https:')) { - this.url = 'wss:' + this.url.substr('https:'.length); + this.url = 'wss:' + this.url.substring('https:'.length); } if (this.url.startsWith('http:')) { - this.url = 'ws:' + this.url.substr('http:'.length); + this.url = 'ws:' + this.url.substring('http:'.length); } if (this.connectFailCount === 0) { logInfo('websocket connecting to ' + this.url); } + this.shouldSkipSync = shouldSkipSync; + try { const headers: ClientHeaders = {origin}; if (Platform.OS === 'android') { @@ -139,9 +137,7 @@ export default class WebSocketClient { // In case turning on/off Wi-fi on Samsung devices // the websocket will call onClose then onError then initialize again with readyState CLOSED, we need to open it again if (this.conn.readyState === WebSocketReadyState.CLOSED) { - if (this.connectionTimeout) { - clearTimeout(this.connectionTimeout); - } + clearTimeout(this.connectionTimeout); this.conn.open(); } return; @@ -152,7 +148,7 @@ export default class WebSocketClient { } this.conn!.onOpen(() => { - this.lastConnect = Date.now(); + clearTimeout(this.connectionTimeout); // No need to reset sequence number here. if (!reliableWebSockets) { @@ -165,34 +161,41 @@ export default class WebSocketClient { this.sendMessage('authentication_challenge', {token: this.token}); } - if (this.connectFailCount > 0) { + if (this.shouldSkipSync) { + logInfo('websocket connected to', this.url); + this.firstConnectCallback?.(); + } else { logInfo('websocket re-established connection to', this.url); if (!reliableWebSockets && this.reconnectCallback) { this.reconnectCallback(); } else if (reliableWebSockets) { + // If a sync is needed, it is handled when receiving the HELLO websocket message this.reliableReconnectCallback?.(); if (this.serverSequence && this.missedEventsCallback) { this.missedEventsCallback(); } - this.hasReliablyReconnect = true; } - } else if (this.firstConnectCallback) { - logInfo('websocket connected to', this.url); - this.firstConnectCallback(); } this.connectFailCount = 0; }); - this.conn!.onClose(() => { - const now = Date.now(); - if (this.lastDisconnect < this.lastConnect) { - this.lastDisconnect = now; - } - + this.conn!.onClose((ev) => { + clearTimeout(this.connectionTimeout); this.conn = undefined; this.responseSequence = 1; - this.hasReliablyReconnect = false; + + // We skip the sync on first connect, since we are syncing along + // the init logic. If the connection closes at any point after that, + // we don't want to skip the sync. If we keep the same connection and + // reliable websockets are enabled this won't trigger a new sync. + this.shouldSkipSync = false; + + if (ev.message && typeof ev.message === 'object' && 'code' in ev.message && ev.message.code === TLS_HANDSHARE_ERROR) { + logDebug('websocket did not connect', this.url, ev.message.reason); + this.closeCallback?.(this.connectFailCount); + return; + } if (this.connectFailCount === 0) { logInfo('websocket closed', this.url); @@ -201,7 +204,7 @@ export default class WebSocketClient { this.connectFailCount++; if (this.closeCallback) { - this.closeCallback(this.connectFailCount, this.lastDisconnect); + this.closeCallback(this.connectFailCount); } if (this.stop) { @@ -212,22 +215,13 @@ export default class WebSocketClient { // If we've failed a bunch of connections then start backing off if (this.connectFailCount > MAX_WEBSOCKET_FAILS) { - retryTime = MIN_WEBSOCKET_RETRY_TIME * this.connectFailCount; - if (retryTime > MAX_WEBSOCKET_RETRY_TIME) { - retryTime = MAX_WEBSOCKET_RETRY_TIME; - } - } - - if (this.connectionTimeout) { - clearTimeout(this.connectionTimeout); + retryTime = Math.min(MIN_WEBSOCKET_RETRY_TIME * this.connectFailCount, MAX_WEBSOCKET_RETRY_TIME); } this.connectionTimeout = setTimeout( () => { if (this.stop) { - if (this.connectionTimeout) { - clearTimeout(this.connectionTimeout); - } + clearTimeout(this.connectionTimeout); return; } this.initialize(opts); @@ -238,7 +232,6 @@ export default class WebSocketClient { this.conn!.onError((evt: any) => { if (evt.url === this.url) { - this.hasReliablyReconnect = false; if (this.connectFailCount <= 1) { logError('websocket error', this.url); logError('WEBSOCKET ERROR EVENT', evt); @@ -263,7 +256,7 @@ export default class WebSocketClient { } else if (this.eventCallback) { if (reliableWebSockets) { // We check the hello packet, which is always the first packet in a stream. - if (msg.event === WebsocketEvents.HELLO && this.reconnectCallback) { + if (msg.event === WebsocketEvents.HELLO) { logInfo(this.url, 'got connection id ', msg.data.connection_id); // If we already have a connectionId present, and server sends a different one, @@ -271,14 +264,16 @@ export default class WebSocketClient { // If the server is not available the first time we try to connect, we won't have a connection id // but still we need to sync. // Then we do the sync calls, and reset sequence number to 0. - if ( - (this.connectionId !== '' && this.connectionId !== msg.data.connection_id) || - (this.hasReliablyReconnect && this.connectionId === '') - ) { - logInfo(this.url, 'long timeout, or server restart, or sequence number is not found, or first connect after failure.'); - this.reconnectCallback(); + if (this.connectionId !== msg.data.connection_id) { + if (this.connectionId) { + logInfo(this.url, 'got a new connection due to long timeout, or server restart, or sequence number is not found'); + } else { + logInfo(this.url, 'got the expected new connection id'); + } + if (!this.shouldSkipSync) { + this.reconnectCallback?.(); + } this.serverSequence = 0; - this.hasReliablyReconnect = false; } // If it's a fresh connection, we have to set the connectionId regardless. @@ -290,16 +285,13 @@ export default class WebSocketClient { // we just disconnect and reconnect. if (msg.seq !== this.serverSequence) { logInfo(this.url, 'missed websocket event, act_seq=' + msg.seq + ' exp_seq=' + this.serverSequence); - - // We are not calling this.close() because we need to auto-restart. - this.connectFailCount = 0; - this.responseSequence = 1; - this.conn?.close(); // Will auto-reconnect after MIN_WEBSOCKET_RETRY_TIME. + this.connectionId = ''; // There was some problem with the sequence number, so we reset the connection + this.close(false); // Will auto-reconnect after MIN_WEBSOCKET_RETRY_TIME. return; } - } else if (msg.seq !== this.serverSequence && this.reconnectCallback) { + } else if (msg.seq !== this.serverSequence) { logInfo(this.url, 'missed websocket event, act_seq=' + msg.seq + ' exp_seq=' + this.serverSequence); - this.reconnectCallback(); + this.reconnectCallback?.(); } this.serverSequence = msg.seq + 1; @@ -338,7 +330,7 @@ export default class WebSocketClient { this.errorCallback = callback; } - public setCloseCallback(callback: (connectFailCount: number, lastDisconnect: number) => void) { + public setCloseCallback(callback: (connectFailCount: number) => void) { this.closeCallback = callback; } @@ -346,14 +338,12 @@ export default class WebSocketClient { this.stop = stop; this.connectFailCount = 0; this.responseSequence = 1; - this.hasReliablyReconnect = false; - - if (this.conn && this.conn.readyState === WebSocketReadyState.OPEN) { - this.conn.close(); - } + clearTimeout(this.connectionTimeout); + this.conn?.close(); } public invalidate() { + clearTimeout(this.connectionTimeout); this.conn?.invalidate(); this.conn = undefined; } @@ -381,6 +371,10 @@ export default class WebSocketClient { } public isConnected(): boolean { - return this.conn?.readyState === WebSocketReadyState.OPEN; //|| (!this.stop && this.connectFailCount <= 2); + return this.conn?.readyState === WebSocketReadyState.OPEN; + } + + public getConnectionId(): string { + return this.connectionId; } } diff --git a/app/components/animated_number/index.tsx b/app/components/animated_number/index.tsx index 6b15b439a11..3b8ee973f3e 100644 --- a/app/components/animated_number/index.tsx +++ b/app/components/animated_number/index.tsx @@ -1,14 +1,14 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import React, {useCallback, useMemo} from 'react'; +import React, {useCallback, useEffect, useMemo, useState} from 'react'; import {Animated, Easing, type LayoutChangeEvent, type StyleProp, Text, type TextStyle, View} from 'react-native'; interface Props { animateToNumber: number; fontStyle?: StyleProp; animationDuration?: number; - easing?: ((input: number) => number) | undefined; + easing?: number; } const NUMBERS = Array(10).fill(null).map((_, i) => i); @@ -24,45 +24,72 @@ const usePrevious = (value: number) => { const AnimatedNumber = ({ animateToNumber, - animationDuration, + animationDuration = 1400, fontStyle, - easing, + easing = 1.2, }: Props) => { - const prevNumber = usePrevious(animateToNumber); + const previousNumber = usePrevious(animateToNumber); + const [numberHeight, setNumberHeight] = useState(0); + const animateToNumberString = String(Math.abs(animateToNumber)); - const prevNumberString = String(Math.abs(prevNumber)); - const numberStringToDigitsArray = Array.from(animateToNumberString, Number); - const prevNumberersArr = Array.from(prevNumberString, Number); + const previousNumberString = useMemo(() => { + // comparing previousNumber and animateToNumber gets trickier when the number of digits changes and the length differs. + // By padding the previousNumber with 0s, or slicing the previousNumber to match the length of animateToNumber + // we can compare them digit by digit + const _previousNumberString = String(Math.abs(previousNumber)).padStart( + animateToNumberString.length, + '0', + ); - const [numberHeight, setNumberHeight] = React.useState(0); - const animations = useMemo(() => numberStringToDigitsArray.map((__, index) => { - if (typeof prevNumberersArr[index] !== 'number') { - return new Animated.Value(0); + if (_previousNumberString.length > animateToNumberString.length) { + _previousNumberString.slice(_previousNumberString.length - animateToNumberString.length); } - const animationHeight = -1 * (numberHeight * prevNumberersArr[index]); - return new Animated.Value(animationHeight); - }), [numberStringToDigitsArray]); + return _previousNumberString; + }, [animateToNumberString, previousNumber]); - const setButtonLayout = useCallback((e: LayoutChangeEvent) => { - setNumberHeight(e.nativeEvent.layout.height); - }, []); + const animations = useMemo(() => { + const animateToNumberArray = Array.from(animateToNumberString, Number); - React.useEffect(() => { + if (!numberHeight) { + return animateToNumberArray.map(() => new Animated.Value(0)); + } + + const previousNumberArray = Array.from(previousNumberString, Number); + + return animateToNumberArray.map((_, index) => { + const useDigit = previousNumberArray[index] === animateToNumberArray[index] ? animateToNumberArray[index] : previousNumberArray[index]; + + return new Animated.Value(-1 * (numberHeight * useDigit)); + }); + }, [animateToNumberString, numberHeight, previousNumberString]); + + useEffect(() => { + if (!numberHeight) { + return; + } + + const animateToNumberArray = Array.from(animateToNumberString, Number); animations.forEach((animation, index) => { Animated.timing(animation, { - toValue: -1 * (numberHeight * numberStringToDigitsArray[index]), - duration: animationDuration || 1400, + toValue: -1 * (numberHeight * animateToNumberArray[index]), + duration: animationDuration, useNativeDriver: true, - easing: easing || Easing.elastic(1.2), + easing: Easing.elastic(easing), }).start(); }); - }, [animateToNumber, animationDuration, fontStyle, numberHeight]); + }, [ + animateToNumberString, + animationDuration, + animations, + easing, + numberHeight, + ]); - const getTranslateY = (index: number) => { - return animations[index]; - }; + const setButtonLayout = useCallback((e: LayoutChangeEvent) => { + setNumberHeight(e.nativeEvent.layout.height); + }, []); return ( <> @@ -71,37 +98,33 @@ const AnimatedNumber = ({ {animateToNumber < 0 && ( {'-'} )} - {numberStringToDigitsArray.map((n, index) => { - return ( - - ( + + - {NUMBERS.map((number, i) => ( - - - {number} - - - ))} - - - ); - })} + ], + }} + > + {NUMBERS.map((number, i) => ( + + + {number} + + + ))} + + + ))} )} {numberHeight === 0 && diff --git a/app/components/announcement_banner/expanded_announcement_banner.tsx b/app/components/announcement_banner/expanded_announcement_banner.tsx index a34938b3c6c..fb5e9e2809b 100644 --- a/app/components/announcement_banner/expanded_announcement_banner.tsx +++ b/app/components/announcement_banner/expanded_announcement_banner.tsx @@ -2,10 +2,10 @@ // See LICENSE.txt for license information. import {BottomSheetScrollView} from '@gorhom/bottom-sheet'; +import {Button} from '@rneui/base'; import React, {useCallback, useMemo} from 'react'; import {useIntl} from 'react-intl'; import {ScrollView, Text, View} from 'react-native'; -import Button from 'react-native-button'; import {useSafeAreaInsets} from 'react-native-safe-area-context'; import {dismissAnnouncement} from '@actions/local/systems'; @@ -110,7 +110,7 @@ const ExpandedAnnouncementBanner = ({ /> + + ); +}; + +export default BookmarkDocument; diff --git a/app/components/channel_bookmarks/channel_bookmark/bookmark_icon.tsx b/app/components/channel_bookmarks/channel_bookmark/bookmark_icon.tsx new file mode 100644 index 00000000000..ef107052639 --- /dev/null +++ b/app/components/channel_bookmarks/channel_bookmark/bookmark_icon.tsx @@ -0,0 +1,68 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Image, type ImageStyle} from 'expo-image'; +import React, {useState, useCallback} from 'react'; +import {type StyleProp, type TextStyle, type ViewStyle} from 'react-native'; + +import CompassIcon from '@components/compass_icon'; +import Emoji from '@components/emoji'; +import FileIcon from '@components/files/file_icon'; +import {useTheme} from '@context/theme'; + +type Props = { + emoji?: string; + emojiSize: number; + emojiStyle?: StyleProp; + file?: FileInfo | ExtractedFileInfo; + iconSize: number; + imageStyle?: StyleProp; + imageUrl?: string; + genericStyle: StyleProp; +} + +const BookmarkIcon = ({emoji, emojiSize, emojiStyle, file, genericStyle, iconSize, imageStyle, imageUrl}: Props) => { + const theme = useTheme(); + const [hasImageError, setHasImageError] = useState(false); + + const handleImageError = useCallback(() => { + setHasImageError(true); + }, []); + + if (file && !emoji && !hasImageError) { + return ( + + ); + } else if (imageUrl && !emoji && !hasImageError) { + return ( + + ); + } else if (emoji) { + return ( + + ); + } + + return ( + + ); +}; + +export default BookmarkIcon; diff --git a/app/components/channel_bookmarks/channel_bookmark/bookmark_options.tsx b/app/components/channel_bookmarks/channel_bookmark/bookmark_options.tsx new file mode 100644 index 00000000000..ae96992bb54 --- /dev/null +++ b/app/components/channel_bookmarks/channel_bookmark/bookmark_options.tsx @@ -0,0 +1,259 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import Clipboard from '@react-native-clipboard/clipboard'; +import React, {useCallback, useMemo} from 'react'; +import {useIntl} from 'react-intl'; +import {Alert, Text, View} from 'react-native'; +import Share from 'react-native-share'; + +import {deleteChannelBookmark} from '@actions/remote/channel_bookmark'; +import {fetchPublicLink} from '@actions/remote/file'; +import CompassIcon from '@components/compass_icon'; +import OptionItem from '@components/option_item'; +import {Screens} from '@constants'; +import {useServerUrl} from '@context/server'; +import {useTheme} from '@context/theme'; +import {useIsTablet} from '@hooks/device'; +import DownloadWithAction from '@screens/gallery/footer/download_with_action'; +import {dismissBottomSheet, showModal, showOverlay} from '@screens/navigation'; +import {getFullErrorMessage} from '@utils/errors'; +import {isImage, isVideo} from '@utils/file'; +import {showSnackBar} from '@utils/snack_bar'; +import {makeStyleSheetFromTheme} from '@utils/theme'; +import {typography} from '@utils/typography'; + +import type ChannelBookmarkModel from '@typings/database/models/servers/channel_bookmark'; +import type FileModel from '@typings/database/models/servers/file'; +import type {GalleryAction, GalleryFileType, GalleryItemType} from '@typings/screens/gallery'; + +type Props = { + bookmark: ChannelBookmarkModel; + canCopyPublicLink: boolean; + canDeleteBookmarks: boolean; + canDownloadFiles: boolean; + canEditBookmarks: boolean; + file?: FileModel; + setAction: React.Dispatch>; +} + +const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ + flex: {flex: 1}, + header: { + marginBottom: 12, + }, + headerText: { + color: theme.centerChannelColor, + ...typography('Heading', 600, 'SemiBold'), + }, +})); + +const ChannelBookmarkOptions = ({ + bookmark, + canCopyPublicLink, + canDeleteBookmarks, + canDownloadFiles, + canEditBookmarks, + file, + setAction, +}: Props) => { + const serverUrl = useServerUrl(); + const theme = useTheme(); + const isTablet = useIsTablet(); + const intl = useIntl(); + const styles = getStyleSheet(theme); + const canShare = canDownloadFiles || bookmark.type === 'link'; + + const isVideoFile = useMemo(() => isVideo(file), [file]); + const isImageFile = useMemo(() => isImage(file), [file]); + const galleryItem = useMemo(() => { + if (file) { + const fileInfo = file.toFileInfo(bookmark.ownerId); + let type: GalleryFileType = 'file'; + if (isImageFile) { + type = 'image'; + } else if (isVideoFile) { + type = 'video'; + } + const item: GalleryItemType = { + ...fileInfo, + id: fileInfo.id!, + type, + lastPictureUpdate: 0, + uri: '', + }; + + return item; + } + return null; + }, [bookmark, file]); + + const handleDelete = useCallback(async () => { + const {error} = await deleteChannelBookmark(serverUrl, bookmark.channelId, bookmark.id); + if (error) { + Alert.alert( + intl.formatMessage({id: 'channel_bookmark.delete.failed_title', defaultMessage: 'Error deleting bookmark'}), + intl.formatMessage({id: 'channel_bookmark.delete.failed_detail', defaultMessage: 'Details: {error}'}, { + error: getFullErrorMessage(error), + }), + ); + return; + } + + await dismissBottomSheet(); + }, [bookmark, intl, serverUrl]); + + const onCopy = useCallback(async () => { + await dismissBottomSheet(); + + if (bookmark.type === 'link' && bookmark.linkUrl) { + Clipboard.setString(bookmark.linkUrl); + showSnackBar({barType: 'LINK_COPIED'}); + return; + } + + try { + const publicLink = await fetchPublicLink(serverUrl, bookmark.fileId!); + if ('link' in publicLink) { + Clipboard.setString(publicLink.link); + showSnackBar({barType: 'LINK_COPIED'}); + } else { + showSnackBar({barType: 'LINK_COPY_FAILED'}); + } + } catch { + showSnackBar({barType: 'LINK_COPY_FAILED'}); + } + }, [bookmark, serverUrl]); + + const onDelete = useCallback(async () => { + Alert.alert( + intl.formatMessage({id: 'channel_bookmark.delete.confirm_title', defaultMessage: 'Delete bookmark'}), + intl.formatMessage({id: 'channel_bookmark.delete.confirm', defaultMessage: 'You sure want to delete the bookmark {displayName}?'}, { + displayName: bookmark.displayName, + }), + [{ + text: intl.formatMessage({id: 'channel_bookmark.delete.yes', defaultMessage: 'Yes'}), + style: 'destructive', + isPreferred: true, + onPress: handleDelete, + }, { + text: intl.formatMessage({id: 'channel_bookmark.add.file_cancel', defaultMessage: 'Cancel'}), + style: 'cancel', + }], + ); + }, [bookmark, handleDelete]); + + const onEdit = useCallback(async () => { + await dismissBottomSheet(); + + const title = intl.formatMessage({id: 'screens.channel_bookmark_edit', defaultMessage: 'Edit bookmark'}); + const closeButton = CompassIcon.getImageSourceSync('close', 24, theme.sidebarHeaderTextColor); + const closeButtonId = 'close-channel_bookmark_edit'; + + const options = { + topBar: { + leftButtons: [{ + id: closeButtonId, + icon: closeButton, + testID: 'close.channel_bookmark_edit.button', + }], + }, + }; + + showModal(Screens.CHANNEL_BOOKMARK, title, { + bookmark: bookmark.toApi(), + canDeleteBookmarks, + channelId: bookmark.channelId, + closeButtonId, + file: file?.toFileInfo(bookmark.ownerId), + ownerId: bookmark.ownerId, + type: bookmark.type, + }, options); + }, [bookmark, canDeleteBookmarks, file, intl, theme]); + + const onShare = useCallback(async () => { + await dismissBottomSheet(); + + if (bookmark.type === 'file') { + if (file) { + setAction('sharing'); + showOverlay(Screens.GENERIC_OVERLAY, { + children: ( + + ), + }, {}, bookmark.id); + } + return; + } + + if (bookmark.type === 'link') { + const title = bookmark.displayName; + const url = bookmark.linkUrl!; + Share.open({ + title, + message: title, + url, + showAppsToView: true, + }).catch(() => { + // do nothing + }); + } + }, [bookmark, file, serverUrl, setAction]); + + return ( + <> + {!isTablet && ( + + + {bookmark.displayName} + + + )} + + {canEditBookmarks && + + } + {canCopyPublicLink && + + } + {canShare && + + } + {canDeleteBookmarks && + + } + + + ); +}; + +export default ChannelBookmarkOptions; diff --git a/app/components/channel_bookmarks/channel_bookmark/channel_bookmark.tsx b/app/components/channel_bookmarks/channel_bookmark/channel_bookmark.tsx new file mode 100644 index 00000000000..81f123ba531 --- /dev/null +++ b/app/components/channel_bookmarks/channel_bookmark/channel_bookmark.tsx @@ -0,0 +1,169 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {useManagedConfig} from '@mattermost/react-native-emm'; +import {Button} from '@rneui/base'; +import React, {useCallback, useEffect, useMemo, useState} from 'react'; +import {useIntl, type IntlShape} from 'react-intl'; +import {Alert, StyleSheet} from 'react-native'; +import Animated from 'react-native-reanimated'; +import {useSafeAreaInsets} from 'react-native-safe-area-context'; + +import {ITEM_HEIGHT} from '@components/option_item'; +import {useServerUrl} from '@context/server'; +import {useTheme} from '@context/theme'; +import {useGalleryItem} from '@hooks/gallery'; +import {TITLE_HEIGHT} from '@screens/bottom_sheet'; +import {bottomSheet, dismissOverlay} from '@screens/navigation'; +import {handleDeepLink, matchDeepLink} from '@utils/deep_link'; +import {isDocument} from '@utils/file'; +import {bottomSheetSnapPoint} from '@utils/helpers'; +import {normalizeProtocol, tryOpenURL} from '@utils/url'; + +import BookmarkDetails from './bookmark_details'; +import BookmarkDocument from './bookmark_document'; +import ChannelBookmarkOptions from './bookmark_options'; + +import type ChannelBookmarkModel from '@typings/database/models/servers/channel_bookmark'; +import type FileModel from '@typings/database/models/servers/file'; +import type {GalleryAction} from '@typings/screens/gallery'; + +type Props = { + bookmark: ChannelBookmarkModel; + canDeleteBookmarks: boolean; + canDownloadFiles: boolean; + canEditBookmarks: boolean; + file?: FileModel; + galleryIdentifier: string; + index?: number; + onPress?: (index: number) => void; + publicLinkEnabled: boolean; + siteURL: string; +} + +const styles = StyleSheet.create({ + container: { + alignItems: 'center', + flexDirection: 'row', + paddingVertical: 6, + height: 48, + }, + button: {backgroundColor: 'transparent'}, +}); + +const openLink = async (href: string, serverUrl: string, siteURL: string, intl: IntlShape) => { + const url = normalizeProtocol(href); + if (!url) { + return; + } + + const match = matchDeepLink(url, serverUrl, siteURL); + + const onLinkError = () => { + Alert.alert( + intl.formatMessage({ + id: 'mobile.link.error.title', + defaultMessage: 'Error', + }), + intl.formatMessage({ + id: 'mobile.link.error.text', + defaultMessage: 'Unable to open the link.', + }), + ); + }; + + if (match) { + const {error} = await handleDeepLink(match.url, intl); + if (error) { + tryOpenURL(match.url, onLinkError); + } + } else { + tryOpenURL(url, onLinkError); + } +}; + +const ChannelBookmark = ({ + bookmark, canDeleteBookmarks, canDownloadFiles, canEditBookmarks, + file, galleryIdentifier, index, onPress, publicLinkEnabled, siteURL, +}: Props) => { + const theme = useTheme(); + const managedConfig = useManagedConfig(); + const serverUrl = useServerUrl(); + const intl = useIntl(); + const {bottom} = useSafeAreaInsets(); + const [action, setAction] = useState('none'); + const isDocumentFile = useMemo(() => isDocument(file), [file]); + const canCopyPublicLink = Boolean((bookmark.type === 'link' || (file?.id && publicLinkEnabled)) && managedConfig.copyAndPasteProtection !== 'true'); + + const handlePress = useCallback(() => { + if (bookmark.linkUrl) { + openLink(bookmark.linkUrl, siteURL, serverUrl, intl); + return; + } + + onPress?.(index || 0); + }, [bookmark, index, intl, onPress, serverUrl, siteURL]); + + const handleLongPress = useCallback(() => { + const canShare = canDownloadFiles || bookmark.type === 'link'; + const count = [canCopyPublicLink, canDeleteBookmarks, canShare, canEditBookmarks]. + filter((e) => e).length; + + const renderContent = () => ( + + ); + + bottomSheet({ + title: bookmark.displayName, + renderContent, + snapPoints: [1, bottomSheetSnapPoint(1, (count * ITEM_HEIGHT), bottom) + TITLE_HEIGHT], + theme, + closeButtonId: 'close-channel-bookmark-actions', + }); + }, [bookmark, bottom, canCopyPublicLink, canDeleteBookmarks, canDownloadFiles, canEditBookmarks, file, theme]); + + const {onGestureEvent, ref} = useGalleryItem(galleryIdentifier, index || 0, handlePress); + + useEffect(() => { + if (action === 'none' && bookmark.id) { + dismissOverlay(bookmark.id); + } + }, [action]); + + if (isDocumentFile) { + return ( + + ); + } + + return ( + + + + ); +}; + +export default ChannelBookmark; diff --git a/app/components/channel_bookmarks/channel_bookmark/index.tsx b/app/components/channel_bookmarks/channel_bookmark/index.tsx new file mode 100644 index 00000000000..81833f8d90b --- /dev/null +++ b/app/components/channel_bookmarks/channel_bookmark/index.tsx @@ -0,0 +1,32 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {withDatabase, withObservables} from '@nozbe/watermelondb/react'; +import {switchMap} from 'rxjs'; + +import {observeFileById} from '@queries/servers/file'; +import {observeConfigValue} from '@queries/servers/system'; + +import ChannelBookmark from './channel_bookmark'; + +import type {WithDatabaseArgs} from '@typings/database/database'; +import type ChannelBookmarkModel from '@typings/database/models/servers/channel_bookmark'; + +type Props = WithDatabaseArgs & { + bookmark: ChannelBookmarkModel; +} + +const enhanced = withObservables([], ({bookmark, database}: Props) => { + const observed = bookmark.observe(); + const file = observed.pipe( + switchMap((b) => observeFileById(database, b.fileId || '')), + ); + + return { + bookmark: observed, + file, + siteURL: observeConfigValue(database, 'SiteURL'), + }; +}); + +export default withDatabase(enhanced(ChannelBookmark)); diff --git a/app/components/channel_bookmarks/channel_bookmarks.tsx b/app/components/channel_bookmarks/channel_bookmarks.tsx new file mode 100644 index 00000000000..2812c3cc065 --- /dev/null +++ b/app/components/channel_bookmarks/channel_bookmarks.tsx @@ -0,0 +1,179 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {LinearGradient} from 'expo-linear-gradient'; +import React, {useCallback, useMemo, useState} from 'react'; +import {FlatList, View, type ListRenderItemInfo, type NativeSyntheticEvent, type NativeScrollEvent} from 'react-native'; +import Animated from 'react-native-reanimated'; + +import {GalleryInit} from '@context/gallery'; +import {useTheme} from '@context/theme'; +import {useChannelBookmarkFiles} from '@hooks/files'; +import ChannelBookmarkModel from '@typings/database/models/servers/channel_bookmark'; +import {fileToGalleryItem, openGalleryAtIndex} from '@utils/gallery'; +import {preventDoubleTap} from '@utils/tap'; +import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; + +import AddBookmark from './add_bookmark'; +import ChannelBookmark from './channel_bookmark'; + +type Props = { + bookmarks: ChannelBookmarkModel[]; + canAddBookmarks: boolean; + canDeleteBookmarks: boolean; + canDownloadFiles: boolean; + canEditBookmarks: boolean; + canUploadFiles: boolean; + channelId: string; + currentUserId: string; + publicLinkEnabled: boolean; + showInInfo: boolean; + separator?: boolean; +} + +const GRADIENT_LOCATIONS = [0, 0.64, 1]; +const SCROLL_OFFSET = 10; + +const isCloseToBottom = ({layoutMeasurement, contentOffset, contentSize}: NativeScrollEvent) => { + return layoutMeasurement.width + contentOffset.x <= contentSize.width - SCROLL_OFFSET; +}; + +const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ + container: { + flexDirection: 'row', + }, + separator: { + height: 1, + backgroundColor: changeOpacity(theme.centerChannelColor, 0.08), + marginTop: 8, + marginBottom: 24, + }, + emptyItemSeparator: { + width: 20, + }, + addContainer: { + width: 40, + alignContent: 'center', + }, + gradient: { + height: 48, + width: 68, + position: 'absolute', + right: 0, + }, + channelView: { + paddingHorizontal: 8, + }, +})); + +const ChannelBookmarks = ({ + bookmarks, canAddBookmarks, canDeleteBookmarks, canDownloadFiles, canEditBookmarks, canUploadFiles, + channelId, currentUserId, publicLinkEnabled, showInInfo, separator = true, +}: Props) => { + const galleryIdentifier = `${channelId}-bookmarks`; + const theme = useTheme(); + const styles = getStyleSheet(theme); + const files = useChannelBookmarkFiles(bookmarks, publicLinkEnabled); + const [allowEndFade, setAllowEndFade] = useState(true); + + const attachmentIndex = useCallback((fileId: string) => { + return files.findIndex((file) => file.id === fileId) || 0; + }, [files]); + + const handlePreviewPress = useCallback(preventDoubleTap((idx: number) => { + if (files.length) { + const items = files.map((f) => fileToGalleryItem(f, f.user_id)); + openGalleryAtIndex(galleryIdentifier, idx, items); + } + }), [files]); + + const renderItem = useCallback(({item}: ListRenderItemInfo) => { + return ( + + ); + }, [ + attachmentIndex, bookmarks, canDownloadFiles, canDeleteBookmarks, canEditBookmarks, + handlePreviewPress, publicLinkEnabled, + ]); + + const renderItemSeparator = useCallback(() => (), []); + + const onScrolled = useCallback((e: NativeSyntheticEvent) => { + setAllowEndFade(isCloseToBottom(e.nativeEvent)); + }, []); + + const gradientColors = useMemo(() => [ + theme.centerChannelBg, + changeOpacity(theme.centerChannelBg, 0.6458), + changeOpacity(theme.centerChannelBg, 0), + ], [theme]); + + if (!bookmarks.length && showInInfo && canAddBookmarks) { + return ( + + ); + } + + if (bookmarks.length) { + return ( + + + + + {canAddBookmarks && + + {allowEndFade && + + } + + + } + + {separator && + + } + + + ); + } + + return null; +}; + +export default ChannelBookmarks; diff --git a/app/components/channel_bookmarks/index.ts b/app/components/channel_bookmarks/index.ts new file mode 100644 index 00000000000..1248da1864a --- /dev/null +++ b/app/components/channel_bookmarks/index.ts @@ -0,0 +1,29 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {withDatabase, withObservables} from '@nozbe/watermelondb/react'; + +import {observeBookmarks, observeCanDeleteBookmarks, observeCanEditBookmarks} from '@queries/servers/channel_bookmark'; +import {observeCanDownloadFiles, observeCanUploadFiles, observeConfigBooleanValue, observeCurrentUserId} from '@queries/servers/system'; + +import ChannelBookmarks from './channel_bookmarks'; + +import type {WithDatabaseArgs} from '@typings/database/database'; + +type Props = WithDatabaseArgs & { + channelId: string; +} + +const enhanced = withObservables([], ({channelId, database}: Props) => { + return { + bookmarks: observeBookmarks(database, channelId), + canDeleteBookmarks: observeCanDeleteBookmarks(database, channelId), + canDownloadFiles: observeCanDownloadFiles(database), + canEditBookmarks: observeCanEditBookmarks(database, channelId), + canUploadFiles: observeCanUploadFiles(database), + currentUserId: observeCurrentUserId(database), + publicLinkEnabled: observeConfigBooleanValue(database, 'EnablePublicLink'), + }; +}); + +export default withDatabase(enhanced(ChannelBookmarks)); diff --git a/app/components/document/index.tsx b/app/components/document/index.tsx new file mode 100644 index 00000000000..66755634484 --- /dev/null +++ b/app/components/document/index.tsx @@ -0,0 +1,168 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {deleteAsync} from 'expo-file-system'; +import {forwardRef, useImperativeHandle, useRef, useState, type ReactNode, useCallback} from 'react'; +import {useIntl} from 'react-intl'; +import {Platform, StatusBar, type StatusBarStyle} from 'react-native'; +import FileViewer from 'react-native-file-viewer'; +import tinyColor from 'tinycolor2'; + +import {downloadFile} from '@actions/remote/file'; +import {useServerUrl} from '@context/server'; +import {useTheme} from '@context/theme'; +import {alertDownloadDocumentDisabled, alertDownloadFailed, alertFailedToOpenDocument} from '@utils/document'; +import {getFullErrorMessage, isErrorWithMessage} from '@utils/errors'; +import {fileExists, getLocalFilePathFromFile} from '@utils/file'; +import {logDebug} from '@utils/log'; + +import type {ClientResponse, ProgressPromise} from '@mattermost/react-native-network-client'; + +export type DocumentRef = { + handlePreviewPress: () => void; +} + +type DocumentProps = { + canDownloadFiles: boolean; + file: FileInfo; + children: ReactNode; + onProgress: (progress: number) => void; +} + +const Document = forwardRef(({canDownloadFiles, children, onProgress, file}: DocumentProps, ref) => { + const intl = useIntl(); + const serverUrl = useServerUrl(); + const theme = useTheme(); + const [didCancel, setDidCancel] = useState(false); + const [downloading, setDownloading] = useState(false); + const [preview, setPreview] = useState(false); + const downloadTask = useRef>(); + + const cancelDownload = () => { + setDidCancel(true); + if (downloadTask.current?.cancel) { + downloadTask.current.cancel(); + } + }; + + const downloadAndPreviewFile = useCallback(async () => { + setDidCancel(false); + let path; + let exists = false; + + try { + path = decodeURIComponent(file.localPath || ''); + if (path) { + exists = await fileExists(path); + } + + if (!exists) { + path = getLocalFilePathFromFile(serverUrl, file); + exists = await fileExists(path); + } + + if (exists) { + openDocument(); + } else { + setDownloading(true); + downloadTask.current = downloadFile(serverUrl, file.id!, path!); + downloadTask.current?.progress?.(onProgress); + + await downloadTask.current; + onProgress(1); + openDocument(); + } + } catch (error) { + if (path) { + deleteAsync(path, {idempotent: true}); + } + setDownloading(false); + onProgress(0); + + if (!isErrorWithMessage(error) || error.message !== 'cancelled') { + logDebug('error on downloadAndPreviewFile', getFullErrorMessage(error)); + alertDownloadFailed(intl); + } + } + }, [file, onProgress]); + + const setStatusBarColor = useCallback((style: StatusBarStyle = 'light-content') => { + if (Platform.OS === 'ios') { + if (style) { + StatusBar.setBarStyle(style, true); + } else { + const headerColor = tinyColor(theme.sidebarHeaderBg); + let barStyle: StatusBarStyle = 'light-content'; + if (headerColor.isLight() && Platform.OS === 'ios') { + barStyle = 'dark-content'; + } + StatusBar.setBarStyle(barStyle, true); + } + } + }, [theme]); + + const openDocument = useCallback(async () => { + if (!didCancel && !preview) { + let path = decodeURIComponent(file.localPath || ''); + let exists = false; + if (path) { + exists = await fileExists(path); + } + + if (!exists) { + path = getLocalFilePathFromFile(serverUrl, file); + } + + setPreview(true); + setStatusBarColor('dark-content'); + FileViewer.open(path!.replace('file://', ''), { + displayName: decodeURIComponent(file.name), + onDismiss: onDonePreviewingFile, + showOpenWithDialog: true, + showAppsSuggestions: true, + }).then(() => { + setDownloading(false); + onProgress(0); + }).catch(() => { + alertFailedToOpenDocument(file, intl); + onDonePreviewingFile(); + + if (path) { + deleteAsync(path, {idempotent: true}); + } + }); + } + }, [didCancel, preview, file, onProgress, setStatusBarColor]); + + const handlePreviewPress = useCallback(async () => { + if (!canDownloadFiles) { + alertDownloadDocumentDisabled(intl); + return; + } + + if (downloading) { + onProgress(0); + cancelDownload(); + setDownloading(false); + } else { + downloadAndPreviewFile(); + } + }, [canDownloadFiles, downloadAndPreviewFile, downloading, intl, onProgress, openDocument]); + + const onDonePreviewingFile = () => { + onProgress(0); + setDownloading(false); + setPreview(false); + setStatusBarColor(); + }; + + useImperativeHandle(ref, () => ({ + handlePreviewPress, + }), [handlePreviewPress]); + + return children; +}); + +Document.displayName = 'Document'; + +export default Document; diff --git a/app/components/emoji/emoji.tsx b/app/components/emoji/emoji.tsx index 7c13fe0d657..80dd997b910 100644 --- a/app/components/emoji/emoji.tsx +++ b/app/components/emoji/emoji.tsx @@ -2,14 +2,13 @@ // See LICENSE.txt for license information. import {withDatabase, withObservables} from '@nozbe/watermelondb/react'; +import {Image} from 'expo-image'; import React from 'react'; import { - Image, Platform, StyleSheet, Text, } from 'react-native'; -import FastImage from 'react-native-fast-image'; import {of as of$} from 'rxjs'; import {switchMap} from 'rxjs/operators'; @@ -127,11 +126,11 @@ const Emoji = (props: EmojiProps) => { const key = Platform.OS === 'android' ? (`${imageUrl}-${height}-${width}`) : null; return ( - ); diff --git a/app/components/files/document_file.tsx b/app/components/files/document_file.tsx index 76ab3295ff9..dbf65bdb7fc 100644 --- a/app/components/files/document_file.tsx +++ b/app/components/files/document_file.tsx @@ -2,34 +2,17 @@ // See LICENSE.txt for license information. import React, {forwardRef, useImperativeHandle, useRef, useState} from 'react'; -import {useIntl} from 'react-intl'; -import {Platform, StatusBar, type StatusBarStyle, StyleSheet, TouchableOpacity, View} from 'react-native'; -import FileViewer from 'react-native-file-viewer'; -import FileSystem from 'react-native-fs'; -import tinyColor from 'tinycolor2'; +import {StyleSheet, TouchableOpacity, View} from 'react-native'; +import Document, {type DocumentRef} from '@components/document'; import ProgressBar from '@components/progress_bar'; -import {DOWNLOAD_TIMEOUT} from '@constants/network'; -import {useServerUrl} from '@context/server'; import {useTheme} from '@context/theme'; -import NetworkManager from '@managers/network_manager'; -import {alertDownloadDocumentDisabled, alertDownloadFailed, alertFailedToOpenDocument} from '@utils/document'; -import {getFullErrorMessage, isErrorWithMessage} from '@utils/errors'; -import {fileExists, getLocalFilePathFromFile} from '@utils/file'; -import {emptyFunction} from '@utils/general'; -import {logDebug} from '@utils/log'; import FileIcon from './file_icon'; -import type {Client} from '@client/rest'; -import type {ClientResponse, ProgressPromise} from '@mattermost/react-native-network-client'; - -export type DocumentFileRef = { - handlePreviewPress: () => void; -} - type DocumentFileProps = { backgroundColor?: string; + disabled?: boolean; canDownloadFiles: boolean; file: FileInfo; } @@ -44,122 +27,13 @@ const styles = StyleSheet.create({ }, }); -const DocumentFile = forwardRef(({backgroundColor, canDownloadFiles, file}: DocumentFileProps, ref) => { - const intl = useIntl(); - const serverUrl = useServerUrl(); +const DocumentFile = forwardRef(({backgroundColor, canDownloadFiles, disabled = false, file}: DocumentFileProps, ref) => { const theme = useTheme(); - const [didCancel, setDidCancel] = useState(false); - const [downloading, setDownloading] = useState(false); - const [preview, setPreview] = useState(false); const [progress, setProgress] = useState(0); - let client: Client | undefined; - try { - client = NetworkManager.getClient(serverUrl); - } catch { - // do nothing - } - const downloadTask = useRef>(); - - const cancelDownload = () => { - setDidCancel(true); - if (downloadTask.current?.cancel) { - downloadTask.current.cancel(); - } - }; - - const downloadAndPreviewFile = async () => { - setDidCancel(false); - let path; - - try { - path = getLocalFilePathFromFile(serverUrl, file); - const exists = await fileExists(path); - if (exists) { - openDocument(); - } else { - setDownloading(true); - downloadTask.current = client?.apiClient.download(client?.getFileRoute(file.id!), path!.replace('file://', ''), {timeoutInterval: DOWNLOAD_TIMEOUT}); - downloadTask.current?.progress?.(setProgress); - - await downloadTask.current; - setProgress(1); - openDocument(); - } - } catch (error) { - if (path) { - FileSystem.unlink(path).catch(emptyFunction); - } - setDownloading(false); - setProgress(0); - - if (!isErrorWithMessage(error) || error.message !== 'cancelled') { - logDebug('error on downloadAndPreviewFile', getFullErrorMessage(error)); - alertDownloadFailed(intl); - } - } - }; + const document = useRef(null); const handlePreviewPress = async () => { - if (!canDownloadFiles) { - alertDownloadDocumentDisabled(intl); - return; - } - - if (downloading && progress < 1) { - cancelDownload(); - } else if (downloading) { - setProgress(0); - setDidCancel(true); - setDownloading(false); - } else { - downloadAndPreviewFile(); - } - }; - - const onDonePreviewingFile = () => { - setProgress(0); - setDownloading(false); - setPreview(false); - setStatusBarColor(); - }; - - const openDocument = () => { - if (!didCancel && !preview) { - const path = getLocalFilePathFromFile(serverUrl, file); - setPreview(true); - setStatusBarColor('dark-content'); - FileViewer.open(path!, { - displayName: file.name, - onDismiss: onDonePreviewingFile, - showOpenWithDialog: true, - showAppsSuggestions: true, - }).then(() => { - setDownloading(false); - setProgress(0); - }).catch(() => { - alertFailedToOpenDocument(file, intl); - onDonePreviewingFile(); - - if (path) { - FileSystem.unlink(path).catch(emptyFunction); - } - }); - } - }; - - const setStatusBarColor = (style: StatusBarStyle = 'light-content') => { - if (Platform.OS === 'ios') { - if (style) { - StatusBar.setBarStyle(style, true); - } else { - const headerColor = tinyColor(theme.sidebarHeaderBg); - let barStyle: StatusBarStyle = 'light-content'; - if (headerColor.isLight() && Platform.OS === 'ios') { - barStyle = 'dark-content'; - } - StatusBar.setBarStyle(barStyle, true); - } - } + document.current?.handlePreviewPress(); }; useImperativeHandle(ref, () => ({ @@ -174,13 +48,13 @@ const DocumentFile = forwardRef(({background ); let fileAttachmentComponent = icon; - if (downloading) { + if (progress) { fileAttachmentComponent = ( <> {icon} @@ -189,9 +63,19 @@ const DocumentFile = forwardRef(({background } return ( - - {fileAttachmentComponent} - + + + {fileAttachmentComponent} + + ); }); diff --git a/app/components/files/file.tsx b/app/components/files/file.tsx index 1041439fa18..bd3ce0d4083 100644 --- a/app/components/files/file.tsx +++ b/app/components/files/file.tsx @@ -11,7 +11,7 @@ import {useGalleryItem} from '@hooks/gallery'; import {isDocument, isImage, isVideo} from '@utils/file'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; -import DocumentFile, {type DocumentFileRef} from './document_file'; +import DocumentFile from './document_file'; import FileIcon from './file_icon'; import FileInfo from './file_info'; import FileOptionsIcon from './file_options_icon'; @@ -19,6 +19,8 @@ import ImageFile from './image_file'; import ImageFileOverlay from './image_file_overlay'; import VideoFile from './video_file'; +import type {DocumentRef} from '@components/document'; + type FileProps = { canDownloadFiles: boolean; file: FileInfo; @@ -36,6 +38,7 @@ type FileProps = { showDate?: boolean; updateFileForGallery: (idx: number, file: FileInfo) => void; asCard?: boolean; + isPressDisabled?: boolean; }; const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => { @@ -79,8 +82,9 @@ const File = ({ showDate = false, updateFileForGallery, wrapperWidth = 300, + isPressDisabled = false, }: FileProps) => { - const document = useRef(null); + const document = useRef(null); const theme = useTheme(); const style = getStyleSheet(theme); @@ -101,6 +105,7 @@ const File = ({ const renderCardWithImage = (fileIcon: JSX.Element) => { const fileInfo = ( + + {Boolean(nonVisibleImagesCount) && @@ -177,6 +188,7 @@ const File = ({ @@ -184,6 +196,7 @@ const File = ({ const fileInfo = ( { }; }); -const FileInfo = ({file, channelName, showDate, onPress}: FileInfoProps) => { +const FileInfo = ({disabled, file, channelName, showDate, onPress}: FileInfoProps) => { const theme = useTheme(); const style = getStyleSheet(theme); + return ( - + - {file.name.trim()} + {decodeURIComponent(file.name.trim())} {channelName && diff --git a/app/components/files/image_file.tsx b/app/components/files/image_file.tsx index ac48ffd1f1e..c604ef7cb92 100644 --- a/app/components/files/image_file.tsx +++ b/app/components/files/image_file.tsx @@ -1,11 +1,11 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {LinearGradient} from 'expo-linear-gradient'; import React, {useCallback, useMemo, useState} from 'react'; import {StyleSheet, useWindowDimensions, View} from 'react-native'; -import LinearGradient from 'react-native-linear-gradient'; -import {buildFilePreviewUrl, buildFileThumbnailUrl} from '@actions/remote/file'; +import {buildFilePreviewUrl, buildFileThumbnailUrl, buildFileUrl} from '@actions/remote/file'; import CompassIcon from '@components/compass_icon'; import ProgressiveImage from '@components/progressive_image'; import {useServerUrl} from '@context/server'; @@ -16,7 +16,7 @@ import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import FileIcon from './file_icon'; -import type {ResizeMode} from 'react-native-fast-image'; +import type {ImageContentFit} from 'expo-image'; type ImageFileProps = { backgroundColor?: string; @@ -24,7 +24,7 @@ type ImageFileProps = { forwardRef?: React.RefObject; inViewPort?: boolean; isSingleImage?: boolean; - resizeMode?: ResizeMode; + contentFit?: ImageContentFit; wrapperWidth?: number; } @@ -67,7 +67,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ const ImageFile = ({ backgroundColor, file, forwardRef, inViewPort, isSingleImage, - resizeMode = 'cover', wrapperWidth, + contentFit = 'cover', wrapperWidth, }: ImageFileProps) => { const dimensions = useWindowDimensions(); const theme = useTheme(); @@ -99,12 +99,17 @@ const ImageFile = ({ } else if (file.id) { if (file.mini_preview && file.mime_type) { props.thumbnailUri = `data:${file.mime_type};base64,${file.mini_preview}`; - } else { + } else if (file.has_preview_image) { props.thumbnailUri = buildFileThumbnailUrl(serverUrl, file.id); } - props.imageUri = buildFilePreviewUrl(serverUrl, file.id); + if (file.has_preview_image) { + props.imageUri = buildFilePreviewUrl(serverUrl, file.id); + } else { + props.imageUri = buildFileUrl(serverUrl, file.id, file.update_at); + } props.inViewPort = inViewPort; } + return props; }; @@ -120,7 +125,7 @@ const ImageFile = ({ style={[isSingleImage ? null : style.imagePreview, imageDimensions]} tintDefaultSource={!file.localPath && !failed} onError={handleError} - resizeMode={resizeMode} + contentFit={contentFit} {...imageProps()} /> ); diff --git a/app/components/files/video_file.tsx b/app/components/files/video_file.tsx index 580d915fed1..2ebab49cf9b 100644 --- a/app/components/files/video_file.tsx +++ b/app/components/files/video_file.tsx @@ -1,8 +1,9 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {getThumbnailAsync} from 'expo-video-thumbnails'; import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'; -import {StyleSheet, useWindowDimensions, View, NativeModules} from 'react-native'; +import {StyleSheet, useWindowDimensions, View} from 'react-native'; import {updateLocalFile} from '@actions/local/file'; import {buildFilePreviewUrl, buildFileUrl} from '@actions/remote/file'; @@ -10,14 +11,14 @@ import CompassIcon from '@components/compass_icon'; import ProgressiveImage from '@components/progressive_image'; import {useServerUrl} from '@context/server'; import {useTheme} from '@context/theme'; +import {getServerCredentials} from '@init/credentials'; import {fileExists} from '@utils/file'; import {calculateDimensions} from '@utils/images'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import FileIcon from './file_icon'; -import type {ResizeMode} from 'react-native-fast-image'; -const {createThumbnail} = NativeModules.MattermostManaged; +import type {ImageContentFit} from 'expo-image'; type Props = { index: number; @@ -25,7 +26,7 @@ type Props = { forwardRef?: React.RefObject; inViewPort?: boolean; isSingleImage?: boolean; - resizeMode?: ResizeMode; + contentFit?: ImageContentFit; wrapperWidth: number; updateFileForGallery?: (idx: number, file: FileInfo) => void; } @@ -61,7 +62,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ const VideoFile = ({ index, file, forwardRef, inViewPort, isSingleImage, - resizeMode = 'cover', wrapperWidth, updateFileForGallery, + contentFit = 'cover', wrapperWidth, updateFileForGallery, }: Props) => { const serverUrl = useServerUrl(); const [failed, setFailed] = useState(false); @@ -86,7 +87,12 @@ const VideoFile = ({ if (!data.mini_preview || !exists) { const videoUrl = buildFileUrl(serverUrl, data.id!); if (videoUrl) { - const {path: uri, height, width} = await createThumbnail({url: data.localPath || videoUrl, timeStamp: 2000}); + const cred = await getServerCredentials(serverUrl); + const headers: Record = {}; + if (cred?.token) { + headers.Authorization = `Bearer ${cred.token}`; + } + const {uri, height, width} = await getThumbnailAsync(data.localPath || videoUrl, {time: 1000, headers}); data.mini_preview = uri; data.height = height; data.width = width; @@ -151,7 +157,7 @@ const VideoFile = ({ forwardRef={forwardRef} style={[isSingleImage ? null : style.imagePreview, imageDimensions]} onError={handleError} - resizeMode={resizeMode} + contentFit={contentFit} {...imageProps()} /> ); diff --git a/app/components/files_search/file_options/icon.tsx b/app/components/files_search/file_options/icon.tsx index 791b57a2a9a..e8fedee9229 100644 --- a/app/components/files_search/file_options/icon.tsx +++ b/app/components/files_search/file_options/icon.tsx @@ -28,7 +28,7 @@ const Icon = ({fileInfo}: Props) => { ); @@ -37,7 +37,7 @@ const Icon = ({fileInfo}: Props) => { (undefined); const {height} = Dimensions.get('window'); - const fileRef = useCallback((element: View) => { - if (showOptions) { - elementsRef.current = element; - elementsRef?.current?.measureInWindow((x, y) => { - setOpenUp((y > height / 2)); - setXYoffset({x, y}); - }); - } - }, [elementsRef, showOptions]); - const handleOptionsPress = useCallback((fInfo: FileInfo) => { - setShowOptions(true); - onOptionsPress(fInfo); + elementsRef.current?.measureInWindow((x, y) => { + setOpenUp((y > height / 2)); + setXYoffset({x, y}); + setShowOptions(true); + onOptionsPress(fInfo); + }); }, []); const handleSetAction = useCallback((action: GalleryAction) => { @@ -82,8 +76,9 @@ const FileResult = ({ return ( <> ({ maxWidth: 315, }, readOnly: { - backgroundColor: changeOpacity(theme.centerChannelBg, 0.16), + backgroundColor: changeOpacity(theme.centerChannelColor, 0.16), }, smallLabel: { fontSize: 10, @@ -139,6 +139,14 @@ const FloatingTextInput = forwardRef getLabelPositions(styles.textInput, styles.label, styles.smallLabel), [styles]); const size = useMemo(() => [styles.textInput.fontSize, styles.smallLabel.fontSize], [styles]); + const shouldShowError = (!focused && error); + + let color = styles.label.color; + if (shouldShowError) { + color = theme.errorTextColor; + } else if (focused) { + color = theme.buttonBg; + } useImperativeHandle(ref, () => ({ blur: () => inputRef.current?.blur(), @@ -175,7 +183,6 @@ const FloatingTextInput = forwardRef { @@ -225,13 +232,6 @@ const FloatingTextInput = forwardRef { if (values && Object.keys(values).length > 0) { // Creates a token with a random UID that should not be guessable or // conflict with other parts of the `message` string. - const uid = Math.floor(Math.random() * 0x10000000000).toString(16); + const uid = generateId(); const generateToken = (() => { let counter = 0; diff --git a/app/components/loading/index.tsx b/app/components/loading/index.tsx index 21b2f3169d6..f85d28bb231 100644 --- a/app/components/loading/index.tsx +++ b/app/components/loading/index.tsx @@ -13,6 +13,7 @@ type LoadingProps = { themeColor?: keyof Theme; footerText?: string; footerTextStyles?: TextStyle; + testID?: string; } const Loading = ({ @@ -22,12 +23,16 @@ const Loading = ({ themeColor, footerText, footerTextStyles, + testID, }: LoadingProps) => { const theme = useTheme(); const indicatorColor = themeColor ? theme[themeColor] : color; return ( - + @@ -262,7 +262,7 @@ const MarkdownImage = ({ id={fileInfo.id!} imageUri={fileInfo.uri} onError={handleOnError} - resizeMode='contain' + contentFit='contain' style={{width, height}} /> diff --git a/app/components/markdown/markdown_table/index.tsx b/app/components/markdown/markdown_table/index.tsx index 8859ad73b90..e8904580166 100644 --- a/app/components/markdown/markdown_table/index.tsx +++ b/app/components/markdown/markdown_table/index.tsx @@ -1,10 +1,10 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {LinearGradient} from 'expo-linear-gradient'; import React, {PureComponent, type ReactNode} from 'react'; import {injectIntl, type IntlShape} from 'react-intl'; import {Dimensions, type EventSubscription, type LayoutChangeEvent, Platform, type ScaledSize, ScrollView, type StyleProp, TouchableOpacity, View, type ViewStyle} from 'react-native'; -import LinearGradient from 'react-native-linear-gradient'; import CompassIcon from '@components/compass_icon'; import {CELL_MAX_WIDTH, CELL_MIN_WIDTH} from '@components/markdown/markdown_table_cell'; diff --git a/app/components/markdown/markdown_table_image/index.tsx b/app/components/markdown/markdown_table_image/index.tsx index 332f2aee997..042887befee 100644 --- a/app/components/markdown/markdown_table_image/index.tsx +++ b/app/components/markdown/markdown_table_image/index.tsx @@ -122,7 +122,7 @@ const MarkTableImage = ({disabled, imagesMetadata, location, postId, serverURL, imageUri={source} forwardRef={ref} onError={onLoadFailed} - resizeMode='contain' + contentFit='contain' style={{width, height}} /> diff --git a/app/components/navigation_header/header.tsx b/app/components/navigation_header/header.tsx index 66099285be5..1c8d4b57274 100644 --- a/app/components/navigation_header/header.tsx +++ b/app/components/navigation_header/header.tsx @@ -32,7 +32,6 @@ type Props = { onTitlePress?: () => void; rightButtons?: HeaderRightButton[]; scrollValue?: Animated.SharedValue; - lockValue?: Animated.SharedValue; showBackButton?: boolean; subtitle?: string; subtitleCompanion?: React.ReactElement; @@ -135,7 +134,6 @@ const Header = ({ onTitlePress, rightButtons, scrollValue, - lockValue, showBackButton = true, subtitle, subtitleCompanion, @@ -155,7 +153,7 @@ const Header = ({ } const barHeight = heightOffset - ViewConstants.LARGE_HEADER_TITLE_HEIGHT; - const val = (scrollValue?.value ?? 0); + const val = (scrollValue?.value || 0); const showDuration = 200; const hideDuration = 50; const duration = val >= barHeight ? showDuration : hideDuration; @@ -168,7 +166,7 @@ const Header = ({ const containerAnimatedStyle = useAnimatedStyle(() => ({ height: defaultHeight, paddingTop: insets.top, - }), [defaultHeight, lockValue]); + }), [defaultHeight]); const containerStyle = useMemo(() => ( [styles.container, containerAnimatedStyle]), [styles, containerAnimatedStyle]); diff --git a/app/components/navigation_header/index.tsx b/app/components/navigation_header/index.tsx index 7c474e1a155..dae9d1c28a9 100644 --- a/app/components/navigation_header/index.tsx +++ b/app/components/navigation_header/index.tsx @@ -24,7 +24,7 @@ type Props = SearchProps & { onTitlePress?: () => void; rightButtons?: HeaderRightButton[]; scrollValue?: Animated.SharedValue; - lockValue?: Animated.SharedValue; + lockValue?: number; hideHeader?: () => void; showBackButton?: boolean; subtitle?: string; @@ -61,32 +61,28 @@ const NavigationHeader = forwardRef(({ const styles = getStyleSheet(theme); const {largeHeight, defaultHeight, headerOffset} = useHeaderHeight(); + + const minScrollValue = useDerivedValue(() => scrollValue?.value || 0, [scrollValue]); + const containerHeight = useAnimatedStyle(() => { - const value = -(scrollValue?.value || 0); - const calculatedHeight = (isLargeTitle ? largeHeight : defaultHeight) + value; - const height = lockValue?.value ? lockValue.value : calculatedHeight; + const calculatedHeight = (isLargeTitle ? largeHeight : defaultHeight) - minScrollValue.value; + const height = lockValue || calculatedHeight; return { height: Math.max(height, defaultHeight), minHeight: defaultHeight, maxHeight: largeHeight + MAX_OVERSCROLL, }; - }); - - const minScrollValue = useDerivedValue(() => scrollValue?.value || 0, [scrollValue]); + }, [defaultHeight, largeHeight, lockValue, isLargeTitle]); const translateY = useDerivedValue(() => ( - lockValue?.value ? -lockValue.value : Math.min(-minScrollValue.value, headerOffset) - ), [lockValue, minScrollValue, headerOffset]); + lockValue ? -lockValue : Math.min(-minScrollValue.value, headerOffset) + ), [lockValue, headerOffset]); const searchTopStyle = useAnimatedStyle(() => { const margin = clamp(-minScrollValue.value, -headerOffset, headerOffset); - const marginTop = (lockValue?.value ? -lockValue?.value : margin) - SEARCH_INPUT_HEIGHT - SEARCH_INPUT_MARGIN; + const marginTop = (lockValue ? -lockValue : margin) - SEARCH_INPUT_HEIGHT - SEARCH_INPUT_MARGIN; return {marginTop}; - }, [lockValue, headerOffset, scrollValue]); - - const heightOffset = useDerivedValue(() => ( - lockValue?.value ? lockValue.value : headerOffset - ), [lockValue, headerOffset]); + }, [lockValue, headerOffset]); return ( @@ -94,12 +90,11 @@ const NavigationHeader = forwardRef(({ defaultHeight={defaultHeight} hasSearch={hasSearch} isLargeTitle={isLargeTitle} - heightOffset={heightOffset.value} + heightOffset={lockValue || headerOffset} leftComponent={leftComponent} onBackPress={onBackPress} onTitlePress={onTitlePress} rightButtons={rightButtons} - lockValue={lockValue} scrollValue={scrollValue} showBackButton={showBackButton} subtitle={subtitle} @@ -109,7 +104,7 @@ const NavigationHeader = forwardRef(({ /> {isLargeTitle && { if (isValidUrl(icon) && !failedToLoadImage) { return ( - ({ height: 40, }, closeButtonText: { - marginTop: 7, + marginTop: 1, color: 'white', fontWeight: 'bold', }, @@ -97,7 +97,7 @@ export default function Archived({ location='' /> diff --git a/app/screens/bottom_sheet/index.tsx b/app/screens/bottom_sheet/index.tsx index 89dbdbfee93..f3e96c8e579 100644 --- a/app/screens/bottom_sheet/index.tsx +++ b/app/screens/bottom_sheet/index.tsx @@ -1,9 +1,10 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import BottomSheetM, {BottomSheetBackdrop, type BottomSheetBackdropProps, type BottomSheetFooterProps} from '@gorhom/bottom-sheet'; +import BottomSheetM, {BottomSheetBackdrop, type BottomSheetBackdropProps} from '@gorhom/bottom-sheet'; import React, {type ReactNode, useCallback, useEffect, useMemo, useRef} from 'react'; import {DeviceEventEmitter, type Handle, InteractionManager, Keyboard, type StyleProp, View, type ViewStyle} from 'react-native'; +import {ReduceMotion, type WithSpringConfig} from 'react-native-reanimated'; import {Events} from '@constants'; import {useTheme} from '@context/theme'; @@ -17,7 +18,6 @@ import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import Indicator from './indicator'; import type {AvailableScreens} from '@typings/screens/navigation'; -import type {WithSpringConfig} from 'react-native-reanimated'; export {default as BottomSheetButton, BUTTON_HEIGHT} from './button'; export {default as BottomSheetContent, TITLE_HEIGHT} from './content'; @@ -27,7 +27,7 @@ type Props = { componentId: AvailableScreens; contentStyle?: StyleProp; initialSnapIndex?: number; - footerComponent?: React.FC; + footerComponent?: React.FC; renderContent: () => ReactNode; snapPoints?: Array; testID?: string; @@ -78,6 +78,7 @@ export const animatedConfig: Omit = { overshootClamping: true, restSpeedThreshold: 0.3, restDisplacementThreshold: 0.3, + reduceMotion: ReduceMotion.Never, }; const BottomSheet = ({ @@ -188,10 +189,12 @@ const BottomSheet = ({ ); if (isTablet) { + const FooterComponent = footerComponent; return ( <> {renderContainerContent()} + {FooterComponent && ()} ); } diff --git a/app/screens/channel/channel.tsx b/app/screens/channel/channel.tsx index f7f524df558..845d20e6bbf 100644 --- a/app/screens/channel/channel.tsx +++ b/app/screens/channel/channel.tsx @@ -1,6 +1,7 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {type KeyboardTrackingViewRef} from 'libraries/@mattermost/keyboard-tracker/src'; import React, {useCallback, useEffect, useRef, useState} from 'react'; import {type LayoutChangeEvent, StyleSheet, View} from 'react-native'; import {type Edge, SafeAreaView, useSafeAreaInsets} from 'react-native-safe-area-context'; @@ -26,7 +27,6 @@ import useGMasDMNotice from './use_gm_as_dm_notice'; import type PreferenceModel from '@typings/database/models/servers/preference'; import type {AvailableScreens} from '@typings/screens/navigation'; -import type {KeyboardTrackingViewRef} from 'react-native-keyboard-tracking-view'; type ChannelProps = { channelId: string; @@ -34,12 +34,14 @@ type ChannelProps = { showJoinCallBanner: boolean; isInACall: boolean; isCallsEnabledInChannel: boolean; + groupCallsAllowed: boolean; showIncomingCalls: boolean; isTabletView?: boolean; dismissedGMasDMNotice: PreferenceModel[]; currentUserId: string; channelType: ChannelType; hasGMasDMFeature: boolean; + includeBookmarkBar?: boolean; }; const edges: Edge[] = ['left', 'right']; @@ -57,12 +59,14 @@ const Channel = ({ showJoinCallBanner, isInACall, isCallsEnabledInChannel, + groupCallsAllowed, showIncomingCalls, isTabletView, dismissedGMasDMNotice, channelType, currentUserId, hasGMasDMFeature, + includeBookmarkBar, }: ChannelProps) => { useGMasDMNotice(currentUserId, channelType, dismissedGMasDMNotice, hasGMasDMFeature); const isTablet = useIsTablet(); @@ -123,7 +127,9 @@ const Channel = ({ channelId={channelId} componentId={componentId} callsEnabledInChannel={isCallsEnabledInChannel} + groupCallsAllowed={groupCallsAllowed} isTabletView={isTabletView} + shouldRenderBookmarks={shouldRender} /> {shouldRender && <> @@ -145,12 +151,13 @@ const Channel = ({ /> } - {showFloatingCallContainer && + {showFloatingCallContainer && shouldRender && } diff --git a/app/screens/channel/channel_post_list/intro/direct_channel/group/group.tsx b/app/screens/channel/channel_post_list/intro/direct_channel/group/group.tsx index add3bc7a72a..a938f6920a6 100644 --- a/app/screens/channel/channel_post_list/intro/direct_channel/group/group.tsx +++ b/app/screens/channel/channel_post_list/intro/direct_channel/group/group.tsx @@ -1,10 +1,10 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {Image} from 'expo-image'; import {chunk} from 'lodash'; import React from 'react'; import {View} from 'react-native'; -import FastImage from 'react-native-fast-image'; import {buildAbsoluteUrl} from '@actions/remote/file'; import {buildProfileImageUrlFromUser} from '@actions/remote/user'; @@ -42,7 +42,7 @@ const Group = ({theme, users}: Props) => { const group = c.map((u, i) => { const pictureUrl = buildProfileImageUrlFromUser(serverUrl, u); return ( - ( /> ( /> ( /> ( /> ( /> ( /> ({ + container: { + backgroundColor: theme.sidebarBg, + width: '100%', + position: 'absolute', + }, + content: { + backgroundColor: theme.centerChannelBg, + borderTopLeftRadius: 12, + borderTopRightRadius: 12, + }, + separator: { + height: 1, + backgroundColor: changeOpacity(theme.centerChannelColor, 0.08), + }, + separatorContainer: { + backgroundColor: theme.centerChannelBg, + zIndex: 1, + }, + padding: { + paddingTop: 2, + }, + paddingHorizontal: { + paddingHorizontal: 10, + }, +})); + +const ChannelHeaderBookmarks = ({canAddBookmarks, channelId}: Props) => { + const theme = useTheme(); + const defaultHeight = useDefaultHeaderHeight(); + const styles = getStyleSheet(theme); + + const containerStyle = useMemo(() => ({ + ...styles.content, + top: defaultHeight, + zIndex: 1, + }), [defaultHeight]); + + return ( + + + + + + + + + + + ); +}; + +export default ChannelHeaderBookmarks; diff --git a/app/screens/channel/header/header.tsx b/app/screens/channel/header/header.tsx index 7d83a064ae1..0b93644c71b 100644 --- a/app/screens/channel/header/header.tsx +++ b/app/screens/channel/header/header.tsx @@ -6,6 +6,7 @@ import {useIntl} from 'react-intl'; import {Keyboard, Platform, Text, View} from 'react-native'; import {useSafeAreaInsets} from 'react-native-safe-area-context'; +import {getCallsConfig} from '@calls/state'; import {CHANNEL_ACTIONS_OPTIONS_HEIGHT} from '@components/channel_actions/channel_actions'; import CompassIcon from '@components/compass_icon'; import CustomStatusEmoji from '@components/custom_status/custom_status_emoji'; @@ -14,6 +15,7 @@ import {ITEM_HEIGHT} from '@components/option_item'; import OtherMentionsBadge from '@components/other_mentions_badge'; import RoundedHeaderContext from '@components/rounded_header_context'; import {General, Screens} from '@constants'; +import {useServerUrl} from '@context/server'; import {useTheme} from '@context/theme'; import {useIsTablet} from '@hooks/device'; import {useDefaultHeaderHeight} from '@hooks/header'; @@ -24,17 +26,21 @@ import {preventDoubleTap} from '@utils/tap'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import {typography} from '@utils/typography'; +import ChannelHeaderBookmarks from './bookmarks'; import QuickActions, {MARGIN, SEPARATOR_HEIGHT} from './quick_actions'; import type {HeaderRightButton} from '@components/navigation_header/header'; import type {AvailableScreens} from '@typings/screens/navigation'; type ChannelProps = { + canAddBookmarks: boolean; channelId: string; channelType: ChannelType; customStatus?: UserCustomStatus; + isBookmarksEnabled: boolean; isCustomStatusEnabled: boolean; isCustomStatusExpired: boolean; + hasBookmarks: boolean; componentId?: AvailableScreens; displayName: string; isOwnDirectMessage: boolean; @@ -42,7 +48,9 @@ type ChannelProps = { searchTerm: string; teamId: string; callsEnabledInChannel: boolean; + groupCallsAllowed: boolean; isTabletView?: boolean; + shouldRenderBookmarks: boolean; }; const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ @@ -71,9 +79,9 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ })); const ChannelHeader = ({ - channelId, channelType, componentId, customStatus, displayName, - isCustomStatusEnabled, isCustomStatusExpired, isOwnDirectMessage, memberCount, - searchTerm, teamId, callsEnabledInChannel, isTabletView, + canAddBookmarks, channelId, channelType, componentId, customStatus, displayName, hasBookmarks, + isBookmarksEnabled, isCustomStatusEnabled, isCustomStatusExpired, isOwnDirectMessage, memberCount, + searchTerm, teamId, callsEnabledInChannel, groupCallsAllowed, isTabletView, shouldRenderBookmarks, }: ChannelProps) => { const intl = useIntl(); const isTablet = useIsTablet(); @@ -81,10 +89,16 @@ const ChannelHeader = ({ const theme = useTheme(); const styles = getStyleSheet(theme); const defaultHeight = useDefaultHeaderHeight(); + const serverUrl = useServerUrl(); + + const callsConfig = getCallsConfig(serverUrl); // NOTE: callsEnabledInChannel will be true/false (not undefined) based on explicit state + the DefaultEnabled system setting // which ultimately comes from channel/index.tsx, and observeIsCallsEnabledInChannel - const callsAvailable = callsEnabledInChannel; + let callsAvailable = callsConfig.pluginEnabled && callsEnabledInChannel; + if (!groupCallsAllowed && channelType !== General.DM_CHANNEL) { + callsAvailable = false; + } const isDMorGM = isTypeDMorGM(channelType); const contextStyle = useMemo(() => ({ @@ -244,6 +258,12 @@ const ChannelHeader = ({ + {isBookmarksEnabled && hasBookmarks && shouldRenderBookmarks && + + } ); }; diff --git a/app/screens/channel/header/index.ts b/app/screens/channel/header/index.ts index e59210e9682..64ee1767c3b 100644 --- a/app/screens/channel/header/index.ts +++ b/app/screens/channel/header/index.ts @@ -4,10 +4,11 @@ import {withDatabase, withObservables} from '@nozbe/watermelondb/react'; import React from 'react'; import {of as of$} from 'rxjs'; -import {combineLatestWith, switchMap} from 'rxjs/operators'; +import {combineLatestWith, distinctUntilChanged, switchMap} from 'rxjs/operators'; import {General} from '@constants'; import {observeChannel, observeChannelInfo} from '@queries/servers/channel'; +import {observeCanAddBookmarks, queryBookmarks} from '@queries/servers/channel_bookmark'; import {observeConfigBooleanValue, observeCurrentTeamId, observeCurrentUserId} from '@queries/servers/system'; import {observeUser} from '@queries/servers/user'; import { @@ -77,11 +78,21 @@ const enhanced = withObservables(['channelId'], ({channelId, database}: OwnProps const memberCount = channelInfo.pipe( combineLatestWith(dmUser), switchMap(([ci, dm]) => of$(dm ? undefined : ci?.memberCount))); + const hasBookmarks = queryBookmarks(database, channelId).observeCount(false).pipe( + switchMap((count) => of$(count > 0)), + distinctUntilChanged(), + ); + + const isBookmarksEnabled = observeConfigBooleanValue(database, 'FeatureFlagChannelBookmarks'); + const canAddBookmarks = observeCanAddBookmarks(database, channelId); return { + canAddBookmarks, channelType, customStatus, displayName, + hasBookmarks, + isBookmarksEnabled, isCustomStatusEnabled, isCustomStatusExpired, isOwnDirectMessage, diff --git a/app/screens/channel/index.tsx b/app/screens/channel/index.tsx index 094659b1bc2..f7b20dc1d99 100644 --- a/app/screens/channel/index.tsx +++ b/app/screens/channel/index.tsx @@ -2,15 +2,17 @@ // See LICENSE.txt for license information. import {withDatabase, withObservables} from '@nozbe/watermelondb/react'; -import {of as of$, switchMap} from 'rxjs'; +import {combineLatestWith, distinctUntilChanged, of as of$, switchMap} from 'rxjs'; import {observeCallStateInChannel, observeIsCallsEnabledInChannel} from '@calls/observers'; +import {observeCallsConfig} from '@calls/state'; import {Preferences} from '@constants'; import {withServerUrl} from '@context/server'; import {observeCurrentChannel} from '@queries/servers/channel'; +import {queryBookmarks} from '@queries/servers/channel_bookmark'; import {observeHasGMasDMFeature} from '@queries/servers/features'; import {queryPreferencesByCategoryAndName} from '@queries/servers/preference'; -import {observeCurrentChannelId, observeCurrentUserId} from '@queries/servers/system'; +import {observeConfigBooleanValue, observeCurrentChannelId, observeCurrentUserId} from '@queries/servers/system'; import Channel from './channel'; @@ -26,15 +28,37 @@ const enhanced = withObservables([], ({database, serverUrl}: EnhanceProps) => { const channelType = observeCurrentChannel(database).pipe(switchMap((c) => of$(c?.type))); const currentUserId = observeCurrentUserId(database); const hasGMasDMFeature = observeHasGMasDMFeature(database); + const isBookmarksEnabled = observeConfigBooleanValue(database, 'FeatureFlagChannelBookmarks'); + const hasBookmarks = (count: number) => of$(count > 0); + const includeBookmarkBar = channelId.pipe( + combineLatestWith(isBookmarksEnabled), + switchMap(([cId, enabled]) => { + if (!enabled) { + return of$(false); + } + + return queryBookmarks(database, cId).observeCount(false).pipe( + switchMap(hasBookmarks), + distinctUntilChanged(), + ); + }), + ); + + const groupCallsAllowed = observeCallsConfig(serverUrl).pipe( + switchMap((config) => of$(config.GroupCallsAllowed)), + distinctUntilChanged(), + ); return { channelId, ...observeCallStateInChannel(serverUrl, database, channelId), isCallsEnabledInChannel: observeIsCallsEnabledInChannel(database, serverUrl, channelId), + groupCallsAllowed, dismissedGMasDMNotice, channelType, currentUserId, hasGMasDMFeature, + includeBookmarkBar, }; }); diff --git a/app/screens/channel_bookmark/components/bookmark_detail.tsx b/app/screens/channel_bookmark/components/bookmark_detail.tsx new file mode 100644 index 00000000000..3f68a4c5e5d --- /dev/null +++ b/app/screens/channel_bookmark/components/bookmark_detail.tsx @@ -0,0 +1,140 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Button} from '@rneui/base'; +import React, {useCallback, useMemo} from 'react'; +import {useIntl} from 'react-intl'; +import {TextInput, View} from 'react-native'; + +import BookmarkIcon from '@components/channel_bookmarks/channel_bookmark/bookmark_icon'; +import CompassIcon from '@components/compass_icon'; +import FormattedText from '@components/formatted_text'; +import {Screens} from '@constants'; +import {useTheme} from '@context/theme'; +import {useIsTablet} from '@hooks/device'; +import {openAsBottomSheet} from '@screens/navigation'; +import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; +import {typography} from '@utils/typography'; + +type Props = { + disabled: boolean; + emoji?: string; + file?: ExtractedFileInfo; + imageUrl?: string; + setBookmarkDisplayName: (displayName: string) => void; + setBookmarkEmoji: (emoji?: string) => void; + title: string; +}; + +const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ + title: { + color: theme.centerChannelColor, + marginBottom: 8, + ...typography('Heading', 100, 'SemiBold'), + }, + container: { + flexDirection: 'row', + }, + disabled: { + backgroundColor: changeOpacity(theme.centerChannelColor, 0.16), + }, + iconContainer: { + borderWidth: 1, + paddingLeft: 16, + paddingRight: 8, + borderColor: changeOpacity(theme.centerChannelColor, 0.16), + borderRightWidth: 0, + borderTopLeftRadius: 4, + borderBottomLeftRadius: 4, + alignItems: 'center', + justifyContent: 'center', + flexDirection: 'row', + }, + iconButton: { + backgroundColor: 'transparent', + alignItems: 'center', + justifyContent: 'center', + }, + imageContainer: {width: 28, height: 28, marginRight: 2}, + image: {width: 24, height: 24}, + input: { + borderBottomRightRadius: 4, + borderTopRightRadius: 4, + borderWidth: 1, + borderColor: changeOpacity(theme.centerChannelColor, 0.16), + paddingVertical: 12, + paddingHorizontal: 16, + flex: 1, + color: theme.centerChannelColor, + ...typography('Body', 200), + lineHeight: undefined, + }, + genericBookmark: { + alignSelf: 'center', + top: 2, + }, +})); + +const BookmarkDetail = ({disabled, emoji, file, imageUrl, setBookmarkDisplayName, setBookmarkEmoji, title}: Props) => { + const intl = useIntl(); + const theme = useTheme(); + const isTablet = useIsTablet(); + const paddingStyle = useMemo(() => ({paddingHorizontal: isTablet ? 42 : 0}), [isTablet]); + const styles = getStyleSheet(theme); + + const openEmojiPicker = useCallback(() => { + openAsBottomSheet({ + closeButtonId: 'close-add-emoji', + screen: Screens.EMOJI_PICKER, + theme, + title: intl.formatMessage({id: 'channel_bookmark.add.emoji', defaultMessage: 'Add emoji'}), + props: { + onEmojiPress: setBookmarkEmoji, + imageUrl, + file, + }, + }); + }, [imageUrl, file, theme, setBookmarkEmoji]); + + return ( + + + + + + + + ); +}; + +export default BookmarkDetail; diff --git a/app/screens/channel_bookmark/components/bookmark_file/bookmark_file.tsx b/app/screens/channel_bookmark/components/bookmark_file/bookmark_file.tsx new file mode 100644 index 00000000000..e77550b09d8 --- /dev/null +++ b/app/screens/channel_bookmark/components/bookmark_file/bookmark_file.tsx @@ -0,0 +1,360 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Button} from '@rneui/base'; +import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'; +import {useIntl} from 'react-intl'; +import {View, Text, Platform, type Insets} from 'react-native'; +import {Shadow} from 'react-native-shadow-2'; + +import {uploadFile} from '@actions/remote/file'; +import CompassIcon from '@app/components/compass_icon'; +import FileIcon from '@app/components/files/file_icon'; +import ProgressBar from '@app/components/progress_bar'; +import FormattedText from '@components/formatted_text'; +import TouchableWithFeedback from '@components/touchable_with_feedback'; +import {useServerUrl} from '@context/server'; +import {useTheme} from '@context/theme'; +import {useIsTablet} from '@hooks/device'; +import {fileSizeWarning, getExtensionFromMime, getFormattedFileSize} from '@utils/file'; +import PickerUtil from '@utils/file/file_picker'; +import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; +import {typography} from '@utils/typography'; + +import type {ClientResponse} from '@mattermost/react-native-network-client'; + +type Props = { + channelId: string; + close: () => void; + disabled: boolean; + initialFile?: FileInfo; + maxFileSize: number; + setBookmark: (file: ExtractedFileInfo) => void; +} + +const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ + viewContainer: { + marginTop: 32, + marginBottom: 24, + width: '100%', + flex: 0, + }, + title: { + color: theme.centerChannelColor, + marginBottom: 8, + ...typography('Heading', 100, 'SemiBold'), + }, + shadowContainer: { + alignItems: 'center', + borderColor: changeOpacity(theme.centerChannelColor, 0.16), + borderWidth: 1, + borderRadius: 4, + }, + fileContainer: { + height: 64, + flexDirection: 'row', + paddingLeft: 12, + alignItems: 'center', + }, + fileInfoContainer: { + paddingHorizontal: 16, + flex: 1, + justifyContent: 'center', + }, + filename: { + color: theme.centerChannelColor, + ...typography('Body', 200, 'SemiBold'), + }, + fileInfo: { + color: changeOpacity(theme.centerChannelColor, 0.64), + textTransform: 'uppercase', + ...typography('Body', 75), + }, + uploadError: { + color: theme.errorTextColor, + ...typography('Body', 75), + }, + retry: { + paddingRight: 20, + height: 40, + justifyContent: 'center', + }, + removeContainer: { + position: 'absolute', + elevation: 11, + top: -18, + right: -12, + width: 24, + height: 24, + }, + removeButton: { + borderRadius: 12, + alignSelf: 'center', + marginTop: Platform.select({ + ios: 5.4, + android: 4.75, + }), + backgroundColor: theme.centerChannelBg, + width: 24, + height: 25, + }, + uploading: { + color: changeOpacity(theme.centerChannelColor, 0.64), + ...typography('Body', 75), + }, + progressContainer: { + alignItems: 'center', + backgroundColor: 'rgba(0, 0, 0, 0.1)', + bottom: 2, + borderBottomRightRadius: 4, + borderBottomLeftRadius: 4, + }, + progress: { + borderRadius: 4, + borderTopRightRadius: 0, + borderTopLeftRadius: 0, + }, +})); + +const shadowSides = {top: false, bottom: true, end: true, start: false}; +const hitSlop: Insets = {top: 10, bottom: 10, left: 10, right: 10}; + +const BookmarkFile = ({channelId, close, disabled, initialFile, maxFileSize, setBookmark}: Props) => { + const theme = useTheme(); + const intl = useIntl(); + const isTablet = useIsTablet(); + const serverUrl = useServerUrl(); + const [file, setFile] = useState(initialFile); + const [error, setError] = useState(''); + const [progress, setProgress] = useState(0); + const [uploading, setUploading] = useState(false); + const [failed, setFailed] = useState(false); + const styles = getStyleSheet(theme); + const subContainerStyle = useMemo(() => [styles.viewContainer, {paddingHorizontal: isTablet ? 42 : 0}], [isTablet]); + const cancelUpload = useRef<() => void | undefined>(); + + const onProgress = useCallback((p: number, bytes: number) => { + if (!file) { + return; + } + + const f: ExtractedFileInfo = {...file}; + f.bytesRead = bytes; + + setProgress(p); + setFile(f); + }, []); + + const onComplete = useCallback((response: ClientResponse) => { + cancelUpload.current = undefined; + if (response.code !== 201 || !response.data) { + setUploadError(); + return; + } + + const data = response.data.file_infos as FileInfo[] | undefined; + if (!data?.length) { + setUploadError(); + return; + } + + const fileInfo = data[0]; + setFile(fileInfo); + setBookmark(fileInfo); + setUploading(false); + setProgress(1); + setFailed(false); + setError(''); + }, []); + + const onError = useCallback(() => { + cancelUpload.current = undefined; + setUploadError(); + }, []); + + const setUploadError = useCallback(() => { + setProgress(0); + setUploading(false); + setFailed(true); + + setError(intl.formatMessage({ + id: 'channel_bookmark.add.file_upload_error', + defaultMessage: 'Error uploading file. Please try again.', + })); + }, [file, intl]); + + const startUpload = useCallback((fileInfo: FileInfo | ExtractedFileInfo) => { + setUploading(true); + setProgress(0); + + const {cancel, error: uploadError} = uploadFile( + serverUrl, + fileInfo, + channelId, + onProgress, + onComplete, + onError, + fileInfo.bytesRead, + true, + ); + + if (cancel) { + cancelUpload.current = cancel; + } + + if (uploadError) { + setUploadError(); + cancelUpload.current?.(); + } + }, [channelId, onProgress, onComplete, onError, serverUrl]); + + const browseFile = useCallback(async () => { + const picker = new PickerUtil(intl, (files) => { + if (files.length) { + const f = files[0]; + const extension = getExtensionFromMime(f.mime_type) || ''; + const fileWithExtension: ExtractedFileInfo = {...f, extension}; + setFile(fileWithExtension); + startUpload(fileWithExtension); + } + }); + + const res = await picker.attachFileFromFiles(undefined, false); + if (res.error) { + close(); + } + }, [close, startUpload]); + + const removeAndUpload = useCallback(() => { + cancelUpload.current?.(); + browseFile(); + }, [file, browseFile]); + + const retry = useCallback(() => { + cancelUpload.current?.(); + if (file) { + startUpload(file); + } + }, [file, startUpload]); + + useEffect(() => { + if (!initialFile) { + browseFile(); + } + + return () => { + cancelUpload.current?.(); + }; + }, []); + + useEffect(() => { + if (uploading) { + return; + } + + if (!file?.id && (file?.size || 0) > maxFileSize) { + setError(fileSizeWarning(intl, maxFileSize)); + return; + } + + if (!file?.id && file?.name) { + setBookmark(file); + } + }, [file, intl, maxFileSize, uploading]); + + let info; + if (error) { + info = ( + + {error} + + ); + } else if (uploading) { + info = ( + + ); + } else if (file) { + info = ( + + {`${file.extension} ${getFormattedFileSize(file.size || 0)}`} + + ); + } + + if (file) { + return ( + + + + + + + + {decodeURIComponent(file.name.trim())} + + {info} + + {failed && + + } + + + + + + + + {uploading && + + + + } + + ); + } + + return null; +}; + +export default BookmarkFile; diff --git a/app/screens/channel_bookmark/components/bookmark_file/index.ts b/app/screens/channel_bookmark/components/bookmark_file/index.ts new file mode 100644 index 00000000000..723083e709b --- /dev/null +++ b/app/screens/channel_bookmark/components/bookmark_file/index.ts @@ -0,0 +1,19 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {withDatabase, withObservables} from '@nozbe/watermelondb/react'; + +import {DEFAULT_SERVER_MAX_FILE_SIZE} from '@constants/post_draft'; +import {observeConfigIntValue} from '@queries/servers/system'; + +import BookmarkFile from './bookmark_file'; + +import type {WithDatabaseArgs} from '@typings/database/database'; + +const enhanced = withObservables([], ({database}: WithDatabaseArgs) => { + return { + maxFileSize: observeConfigIntValue(database, 'MaxFileSize', DEFAULT_SERVER_MAX_FILE_SIZE), + }; +}); + +export default withDatabase(enhanced(BookmarkFile)); diff --git a/app/screens/channel_bookmark/components/bookmark_link.tsx b/app/screens/channel_bookmark/components/bookmark_link.tsx new file mode 100644 index 00000000000..a4d59ca47bd --- /dev/null +++ b/app/screens/channel_bookmark/components/bookmark_link.tsx @@ -0,0 +1,133 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import React, {useCallback, useMemo, useState} from 'react'; +import {useIntl} from 'react-intl'; +import {Platform, View} from 'react-native'; + +import {useIsTablet} from '@app/hooks/device'; +import FloatingTextInput from '@components/floating_text_input_label'; +import FormattedText from '@components/formatted_text'; +import Loading from '@components/loading'; +import {useTheme} from '@context/theme'; +import {debounce} from '@helpers/api/general'; +import useDidUpdate from '@hooks/did_update'; +import {fetchOpenGraph} from '@utils/opengraph'; +import {changeOpacity, getKeyboardAppearanceFromTheme, makeStyleSheetFromTheme} from '@utils/theme'; +import {typography} from '@utils/typography'; +import {getUrlAfterRedirect} from '@utils/url'; + +type Props = { + disabled: boolean; + initialUrl?: string; + resetBookmark: () => void; + setBookmark: (url: string, title: string, imageUrl: string) => void; +} + +const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ + viewContainer: { + marginVertical: 32, + width: '100%', + }, + description: { + marginTop: 8, + }, + descriptionText: { + ...typography('Body', 75), + color: changeOpacity(theme.centerChannelColor, 0.56), + }, + loading: { + alignItems: 'flex-end', + justifyContent: 'center', + }, +})); + +const BookmarkLink = ({disabled, initialUrl = '', resetBookmark, setBookmark}: Props) => { + const theme = useTheme(); + const intl = useIntl(); + const isTablet = useIsTablet(); + const [error, setError] = useState(''); + const [url, setUrl] = useState(initialUrl); + const [loading, setLoading] = useState(false); + const styles = getStyleSheet(theme); + const keyboard = (Platform.OS === 'android') ? 'default' : 'url'; + const subContainerStyle = useMemo(() => [styles.viewContainer, {paddingHorizontal: isTablet ? 42 : 0}], [isTablet, styles]); + const descContainer = useMemo(() => [styles.description, {paddingHorizontal: isTablet ? 42 : 0}], [isTablet, styles]); + + const validateAndFetchOG = useCallback(debounce(async (text: string) => { + setLoading(true); + let link = await getUrlAfterRedirect(text, false); + + if (link.error) { + link = await getUrlAfterRedirect(text, true); + } + + if (link.url) { + const result = await fetchOpenGraph(link.url, true); + const title = result.title || text; + const imageUrl = result.favIcon || result.imageURL || ''; + setLoading(false); + setBookmark(link.url, title, imageUrl); + return; + } + setError(intl.formatMessage({ + id: 'channel_bookmark_add.link.invalid', + defaultMessage: 'Please enter a valid link', + })); + setLoading(false); + }, 500), [intl]); + + const onChangeText = useCallback((text: string) => { + resetBookmark(); + setUrl(text); + setError(''); + }, [resetBookmark]); + + const onSubmitEditing = useCallback(() => { + if (url) { + validateAndFetchOG(url); + } + }, [url, error]); + + useDidUpdate(debounce(() => { + onSubmitEditing(); + }, 300), [onSubmitEditing]); + + return ( + + + } + /> + + + + + ); +}; + +export default BookmarkLink; diff --git a/app/screens/channel_bookmark/index.tsx b/app/screens/channel_bookmark/index.tsx new file mode 100644 index 00000000000..81f310494ad --- /dev/null +++ b/app/screens/channel_bookmark/index.tsx @@ -0,0 +1,323 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import React, {useCallback, useEffect, useState} from 'react'; +import {useIntl} from 'react-intl'; +import {Alert, View, type AlertButton} from 'react-native'; +import {SafeAreaView, type Edge} from 'react-native-safe-area-context'; + +import {addRecentReaction} from '@actions/local/reactions'; +import {createChannelBookmark, deleteChannelBookmark, editChannelBookmark} from '@actions/remote/channel_bookmark'; +import Button from '@components/button'; +import {useServerUrl} from '@context/server'; +import {useTheme} from '@context/theme'; +import useAndroidHardwareBackHandler from '@hooks/android_back_handler'; +import useNavButtonPressed from '@hooks/navigation_button_pressed'; +import {buildNavigationButton, dismissModal, setButtons} from '@screens/navigation'; +import {getFullErrorMessage} from '@utils/errors'; +import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; + +import BookmarkDetail from './components/bookmark_detail'; +import AddBookmarkFile from './components/bookmark_file'; +import BookmarkLink from './components/bookmark_link'; + +import type {AvailableScreens} from '@typings/screens/navigation'; + +type Props = { + bookmark?: ChannelBookmark; + canDeleteBookmarks?: boolean; + channelId: string; + closeButtonId: string; + componentId: AvailableScreens; + file?: FileInfo; + ownerId: string; + type: ChannelBookmarkType; +} + +const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ + content: { + flex: 1, + paddingHorizontal: 20, + paddingBottom: 16, + }, + progress: { + alignItems: 'center', + backgroundColor: 'rgba(0, 0, 0, 0.1)', + borderRadius: 4, + paddingLeft: 3, + marginTop: 12, + }, + deleteBg: {backgroundColor: changeOpacity(theme.errorTextColor, 0.16)}, + deleteContainer: {paddingTop: 32}, + deleteText: {color: theme.errorTextColor}, +})); + +const RIGHT_BUTTON = buildNavigationButton('edit-bookmark', 'channel_bookmark.edit.save_button'); +const edges: Edge[] = ['bottom', 'left', 'right']; +const emptyBookmark: ChannelBookmark = { + id: '', + create_at: 0, + update_at: 0, + delete_at: 0, + channel_id: '', + owner_id: '', + display_name: '', + sort_order: 0, + type: 'link', +}; + +const ChannelBookmarkAddOrEdit = ({ + bookmark: original, + canDeleteBookmarks = false, + channelId, + closeButtonId, + componentId, + file: originalFile, + ownerId, + type, +}: Props) => { + const {formatMessage} = useIntl(); + const theme = useTheme(); + const serverUrl = useServerUrl(); + const styles = getStyleSheet(theme); + const [bookmark, setBookmark] = useState(original); + const [file, setFile] = useState(originalFile); + const [isSaving, setIsSaving] = useState(false); + + const enableSaveButton = useCallback((enabled: boolean) => { + setButtons(componentId, { + rightButtons: [{ + ...RIGHT_BUTTON, + color: theme.sidebarHeaderTextColor, + text: formatMessage({id: 'channel_bookmark.edit.save_button', defaultMessage: 'Save'}), + enabled, + }], + }); + }, [formatMessage, theme]); + + const setBookmarkToSave = useCallback((b?: ChannelBookmark) => { + enableSaveButton((b?.type === 'link' && Boolean(b?.link_url)) || (b?.type === 'file' && Boolean(b.file_id))); + setBookmark(b); + }, []); + + const handleError = useCallback((error: string, buttons?: AlertButton[]) => { + const title = original ? formatMessage({id: 'channel_bookmark.edit.failed_title', defaultMessage: 'Error editing bookmark'}) : formatMessage({id: 'channel_bookmark.add.failed_title', defaultMessage: 'Error adding bookmark'}); + Alert.alert( + title, + formatMessage({ + id: 'channel_bookmark.add_edit.failed_desc', + defaultMessage: 'Details: {error}', + }, {error}), + buttons, + ); + setIsSaving(false); + const enabled = Boolean(bookmark?.display_name && + ((bookmark?.type === 'link' && Boolean(bookmark?.link_url)) || (bookmark?.type === 'file' && Boolean(bookmark.file_id)))); + enableSaveButton(enabled); + }, [bookmark, enableSaveButton, formatMessage]); + + const close = useCallback(() => { + return dismissModal({componentId}); + }, [componentId]); + + const createBookmark = useCallback(async (b: ChannelBookmark) => { + const res = await createChannelBookmark(serverUrl, channelId, b); + if (res.bookmark) { + close(); + return; + } + + handleError((res.error as Error).message); + }, [channelId, handleError, serverUrl]); + + const updateBookmark = useCallback(async (b: ChannelBookmark) => { + const res = await editChannelBookmark(serverUrl, b); + if (res.bookmarks) { + close(); + return; + } + + handleError((res.error as Error).message); + }, [handleError, serverUrl]); + + const setLinkBookmark = useCallback((url: string, title: string, imageUrl: string) => { + const b: ChannelBookmark = { + ...(bookmark || emptyBookmark), + owner_id: ownerId, + channel_id: channelId, + link_url: url, + image_url: imageUrl, + display_name: title, + type: 'link', + }; + + setBookmarkToSave(b); + }, [bookmark, channelId, setBookmarkToSave, ownerId]); + + const setFileBookmark = useCallback((f: ExtractedFileInfo) => { + const b: ChannelBookmark = { + ...(bookmark || emptyBookmark), + owner_id: ownerId, + channel_id: channelId, + display_name: decodeURIComponent(f.name), + type: 'file', + file_id: f.id, + }; + setBookmarkToSave(b); + setFile(f); + }, [bookmark, channelId, ownerId]); + + const setBookmarkDisplayName = useCallback((displayName: string) => { + if (bookmark) { + setBookmark((prev) => ({ + ...(prev!), + display_name: displayName, + })); + } + + enableSaveButton(Boolean(displayName)); + }, [bookmark, enableSaveButton]); + + const setBookmarkEmoji = useCallback((emoji?: string) => { + if (bookmark) { + setBookmark((prev) => ({ + ...prev!, + emoji, + })); + + const prevEmoji = original ? original.emoji : ''; + if (prevEmoji !== emoji) { + enableSaveButton(true); + } + } + + if (emoji) { + addRecentReaction(serverUrl, [emoji]); + } + }, [bookmark, enableSaveButton, serverUrl]); + + const resetBookmark = useCallback(() => { + setBookmarkToSave(original); + setFile(originalFile); + }, [setBookmarkToSave]); + + const onSaveBookmark = useCallback(async () => { + if (bookmark) { + enableSaveButton(false); + setIsSaving(true); + if (original) { + updateBookmark(bookmark); + return; + } + + createBookmark(bookmark); + } + }, [bookmark, createBookmark, updateBookmark]); + + const handleDelete = useCallback(async () => { + if (bookmark) { + setIsSaving(true); + enableSaveButton(false); + const {error} = await deleteChannelBookmark(serverUrl, bookmark.channel_id, bookmark.id); + if (error) { + Alert.alert( + formatMessage({id: 'channel_bookmark.delete.failed_title', defaultMessage: 'Error deleting bookmark'}), + formatMessage({ + id: 'channel_bookmark.add_edit.failed_desc', + defaultMessage: 'Details: {error}', + }, {error: getFullErrorMessage(error)}), + ); + setIsSaving(false); + enableSaveButton(true); + return; + } + + close(); + } + }, [bookmark, serverUrl, close]); + + const onDelete = useCallback(async () => { + if (bookmark) { + Alert.alert( + formatMessage({id: 'channel_bookmark.delete.confirm_title', defaultMessage: 'Delete bookmark'}), + formatMessage({id: 'channel_bookmark.delete.confirm', defaultMessage: 'You sure want to delete the bookmark {displayName}?'}, { + displayName: bookmark.display_name, + }), + [{ + text: formatMessage({id: 'channel_bookmark.delete.yes', defaultMessage: 'Yes'}), + style: 'destructive', + isPreferred: true, + onPress: handleDelete, + }, { + text: formatMessage({id: 'channel_bookmark.add.file_cancel', defaultMessage: 'Cancel'}), + style: 'cancel', + }], + ); + } + }, [bookmark, handleDelete]); + + useEffect(() => { + enableSaveButton(false); + }, []); + + useNavButtonPressed(RIGHT_BUTTON.id, componentId, onSaveBookmark, [bookmark]); + useNavButtonPressed(closeButtonId, componentId, close, [close]); + useAndroidHardwareBackHandler(componentId, close); + + return ( + + {type === 'link' && + + } + {type === 'file' && + + } + {Boolean(bookmark) && + <> + + {canDeleteBookmarks && + + + + ); +}; + +export default AuthError; diff --git a/app/screens/sso/components/auth_redirect.tsx b/app/screens/sso/components/auth_redirect.tsx new file mode 100644 index 00000000000..f374aa9d4cb --- /dev/null +++ b/app/screens/sso/components/auth_redirect.tsx @@ -0,0 +1,55 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import React from 'react'; +import {View} from 'react-native'; + +import FormattedText from '@components/formatted_text'; +import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; +import {typography} from '@utils/typography'; + +interface AuthRedirectProps { + theme: Theme; +} + +const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => { + return { + infoContainer: { + alignItems: 'center', + flex: 1, + justifyContent: 'center', + }, + infoText: { + color: changeOpacity(theme.centerChannelColor, 0.72), + ...typography('Body', 100, 'Regular'), + }, + infoTitle: { + color: theme.centerChannelColor, + marginBottom: 4, + ...typography('Heading', 700), + }, + }; +}); + +const AuthRedirect = ({theme}: AuthRedirectProps) => { + const style = getStyleSheet(theme); + + return ( + + + + + ); +}; + +export default AuthRedirect; diff --git a/app/screens/sso/components/auth_success.tsx b/app/screens/sso/components/auth_success.tsx new file mode 100644 index 00000000000..2550450b939 --- /dev/null +++ b/app/screens/sso/components/auth_success.tsx @@ -0,0 +1,57 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import React from 'react'; +import {View} from 'react-native'; + +import FormattedText from '@components/formatted_text'; +import Loading from '@components/loading'; +import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; +import {typography} from '@utils/typography'; + +interface AuthSuccessProps { + theme: Theme; +} + +const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => { + return { + infoContainer: { + alignItems: 'center', + flex: 1, + justifyContent: 'center', + }, + infoText: { + color: changeOpacity(theme.centerChannelColor, 0.72), + ...typography('Body', 100, 'Regular'), + }, + infoTitle: { + color: theme.centerChannelColor, + marginBottom: 4, + ...typography('Heading', 700), + }, + }; +}); + +const AuthSuccess = ({theme}: AuthSuccessProps) => { + const style = getStyleSheet(theme); + + return ( + + + + + + ); +}; + +export default AuthSuccess; diff --git a/app/screens/sso/index.tsx b/app/screens/sso/index.tsx index 75f7e20a8dd..6cabcbf47c8 100644 --- a/app/screens/sso/index.tsx +++ b/app/screens/sso/index.tsx @@ -1,7 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import {useManagedConfig} from '@mattermost/react-native-emm'; import React, {useCallback, useEffect, useState} from 'react'; import {Platform, StyleSheet, useWindowDimensions, View} from 'react-native'; import {Navigation} from 'react-native-navigation'; @@ -18,8 +17,8 @@ import {dismissModal, popTopScreen, resetToHome} from '@screens/navigation'; import {getFullErrorMessage, isErrorWithUrl} from '@utils/errors'; import {logWarning} from '@utils/log'; -import SSOWithRedirectURL from './sso_with_redirect_url'; -import SSOWithWebView from './sso_with_webview'; +import SSOAuthentication from './sso_authentication'; +import SSOAuthenticationWithExternalBrowser from './sso_authentication_with_external_browser'; import type {LaunchProps} from '@typings/launch'; import type {AvailableScreens} from '@typings/screens/navigation'; @@ -47,37 +46,29 @@ const SSO = ({ launchError, launchType, serverDisplayName, serverUrl, ssoType, theme, }: SSOProps) => { - const managedConfig = useManagedConfig(); - const inAppSessionAuth = managedConfig?.inAppSessionAuth === 'true'; const dimensions = useWindowDimensions(); - const translateX = useSharedValue(inAppSessionAuth ? 0 : dimensions.width); + const translateX = useSharedValue(dimensions.width); const [loginError, setLoginError] = useState(''); - let completeUrlPath = ''; let loginUrl = ''; switch (ssoType) { case Sso.GOOGLE: { - completeUrlPath = '/signup/google/complete'; loginUrl = `${serverUrl}/oauth/google/mobile_login`; break; } case Sso.GITLAB: { - completeUrlPath = '/signup/gitlab/complete'; loginUrl = `${serverUrl}/oauth/gitlab/mobile_login`; break; } case Sso.SAML: { - completeUrlPath = '/login/sso/saml'; loginUrl = `${serverUrl}/login/sso/saml?action=mobile`; break; } case Sso.OFFICE365: { - completeUrlPath = '/signup/office365/complete'; loginUrl = `${serverUrl}/oauth/office365/mobile_login`; break; } case Sso.OPENID: { - completeUrlPath = '/signup/openid/complete'; loginUrl = `${serverUrl}/oauth/openid/mobile_login`; break; } @@ -165,19 +156,17 @@ const SSO = ({ theme, }; - let ssoComponent; - if (inAppSessionAuth) { - ssoComponent = ( - ); } else { - ssoComponent = ( - @@ -188,7 +177,7 @@ const SSO = ({ - {ssoComponent} + {authentication} ); diff --git a/app/screens/sso/sso.test.tsx b/app/screens/sso/sso.test.tsx index 69ec1fd9657..2a267d7a11c 100644 --- a/app/screens/sso/sso.test.tsx +++ b/app/screens/sso/sso.test.tsx @@ -3,40 +3,49 @@ import React from 'react'; -import {Preferences, Screens} from '@constants'; -import LaunchType from '@constants/launch'; +import LocalConfig from '@assets/config.json'; +import Preferences from '@constants/preferences'; import {renderWithIntl} from '@test/intl-test-helper'; -import SSOLogin from './index'; - -jest.mock('@screens/navigation', () => { - return { - getThemeFromState: () => 'light', - }; -}); +import SSOAuthentication from './sso_authentication'; jest.mock('@utils/url', () => { return { - tryOpenURL: () => true, + tryOpenURL: () => null, }; }); -describe('SSO', () => { +describe('SSO with redirect url', () => { const baseProps = { - componentId: Screens.SSO, - license: { - IsLicensed: 'true', - }, - ssoType: 'GITLAB', + customUrlScheme: LocalConfig.AuthUrlSchemeDev, + doSSOLogin: jest.fn(), + intl: {}, + loginError: '', + loginUrl: '', + serverUrl: 'http://localhost:8065', + setLoginError: jest.fn(), theme: Preferences.THEMES.denim, - serverUrl: 'https://locahost:8065', - serverDisplayName: 'Test Server', - launchType: LaunchType.Normal, }; - test('implement with OS browser & redirect url from version 5.33', async () => { - const props = {...baseProps, config: {Version: '5.36.0'}}; - const {getByTestId} = renderWithIntl(); - expect(getByTestId('sso.redirect_url')).toBeTruthy(); + test('should show message when user navigates to the page', () => { + const {getByTestId} = renderWithIntl(); + expect(getByTestId('mobile.oauth.switch_to_browser')).toBeDefined(); + }); + + test('should show "try again" and hide default message when error text is displayed', () => { + const {getByTestId} = renderWithIntl( + , + ); + expect(getByTestId('mobile.oauth.try_again')).toBeDefined(); + let browser; + try { + browser = getByTestId('mobile.oauth.switch_to_browser'); + } catch (error) { + // do nothing + } + expect(browser).toBeUndefined(); }); }); diff --git a/app/screens/sso/sso_authentication.tsx b/app/screens/sso/sso_authentication.tsx new file mode 100644 index 00000000000..c60007ce01c --- /dev/null +++ b/app/screens/sso/sso_authentication.tsx @@ -0,0 +1,141 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {openAuthSessionAsync} from 'expo-web-browser'; +import qs from 'querystringify'; +import React, {useEffect, useState} from 'react'; +import {useIntl} from 'react-intl'; +import {Linking, Platform, StyleSheet, View, type EventSubscription} from 'react-native'; +import urlParse from 'url-parse'; + +import {Sso} from '@constants'; +import NetworkManager from '@managers/network_manager'; +import {isBetaApp} from '@utils/general'; + +import AuthError from './components/auth_error'; +import AuthRedirect from './components/auth_redirect'; +import AuthSuccess from './components/auth_success'; + +interface SSOAuthenticationProps { + doSSOLogin: (bearerToken: string, csrfToken: string) => void; + loginError: string; + loginUrl: string; + serverUrl: string; + setLoginError: (value: string) => void; + theme: Theme; +} + +const style = StyleSheet.create({ + container: { + flex: 1, + paddingHorizontal: 24, + }, +}); + +const SSOAuthentication = ({doSSOLogin, loginError, loginUrl, serverUrl, setLoginError, theme}: SSOAuthenticationProps) => { + const [error, setError] = useState(''); + const [loginSuccess, setLoginSuccess] = useState(false); + const intl = useIntl(); + let customUrlScheme = Sso.REDIRECT_URL_SCHEME; + if (isBetaApp) { + customUrlScheme = Sso.REDIRECT_URL_SCHEME_DEV; + } + + const redirectUrl = customUrlScheme + 'callback'; + const init = async (resetErrors = true) => { + setLoginSuccess(false); + if (resetErrors !== false) { + setError(''); + setLoginError(''); + NetworkManager.invalidateClient(serverUrl); + NetworkManager.createClient(serverUrl); + } + const parsedUrl = urlParse(loginUrl, true); + const query: Record = { + ...parsedUrl.query, + redirect_to: redirectUrl, + }; + parsedUrl.set('query', qs.stringify(query)); + const url = parsedUrl.toString(); + const result = await openAuthSessionAsync(url, null, {preferEphemeralSession: true, createTask: false}); + if ('url' in result && result.url) { + const resultUrl = urlParse(result.url, true); + const bearerToken = resultUrl.query?.MMAUTHTOKEN; + const csrfToken = resultUrl.query?.MMCSRF; + if (bearerToken && csrfToken) { + setLoginSuccess(true); + doSSOLogin(bearerToken, csrfToken); + } + } else if (Platform.OS === 'ios' || result.type === 'dismiss') { + setError( + intl.formatMessage({ + id: 'mobile.oauth.failed_to_login', + defaultMessage: 'Your login attempt failed. Please try again.', + }), + ); + } + }; + + useEffect(() => { + let listener: EventSubscription | null = null; + + if (Platform.OS === 'android') { + const onURLChange = ({url}: { url: string }) => { + setError(''); + if (url && url.startsWith(redirectUrl)) { + const parsedUrl = urlParse(url, true); + const bearerToken = parsedUrl.query?.MMAUTHTOKEN; + const csrfToken = parsedUrl.query?.MMCSRF; + if (bearerToken && csrfToken) { + setLoginSuccess(true); + doSSOLogin(bearerToken, csrfToken); + } else { + setError( + intl.formatMessage({ + id: 'mobile.oauth.failed_to_login', + defaultMessage: 'Your login attempt failed. Please try again.', + }), + ); + } + } + }; + + listener = Linking.addEventListener('url', onURLChange); + } + + const timeout = setTimeout(() => { + init(false); + }, 1000); + + return () => { + clearTimeout(timeout); + listener?.remove(); + }; + }, []); + + let content; + if (loginSuccess) { + content = (); + } else if (loginError || error) { + content = ( + + ); + } else { + content = (); + } + + return ( + + {content} + + ); +}; + +export default SSOAuthentication; diff --git a/app/screens/sso/sso_with_redirect_url.tsx b/app/screens/sso/sso_authentication_with_external_browser.tsx similarity index 66% rename from app/screens/sso/sso_with_redirect_url.tsx rename to app/screens/sso/sso_authentication_with_external_browser.tsx index 2238e48222a..af439c23b5b 100644 --- a/app/screens/sso/sso_with_redirect_url.tsx +++ b/app/screens/sso/sso_authentication_with_external_browser.tsx @@ -4,20 +4,21 @@ import qs from 'querystringify'; import React, {useEffect, useState} from 'react'; import {useIntl} from 'react-intl'; -import {Linking, Platform, Text, View} from 'react-native'; -import Button from 'react-native-button'; +import {Linking, Platform, View} from 'react-native'; import urlParse from 'url-parse'; -import FormattedText from '@components/formatted_text'; import {Sso} from '@constants'; import NetworkManager from '@managers/network_manager'; -import {buttonBackgroundStyle, buttonTextStyle} from '@utils/buttonStyles'; import {isErrorWithMessage} from '@utils/errors'; import {isBetaApp} from '@utils/general'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import {typography} from '@utils/typography'; import {tryOpenURL} from '@utils/url'; +import AuthError from './components/auth_error'; +import AuthRedirect from './components/auth_redirect'; +import AuthSuccess from './components/auth_success'; + interface SSOWithRedirectURLProps { doSSOLogin: (bearerToken: string, csrfToken: string) => void; loginError: string; @@ -58,8 +59,9 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => { }; }); -const SSOWithRedirectURL = ({doSSOLogin, loginError, loginUrl, serverUrl, setLoginError, theme}: SSOWithRedirectURLProps) => { +const SSOAuthenticationWithExternalBrowser = ({doSSOLogin, loginError, loginUrl, serverUrl, setLoginError, theme}: SSOWithRedirectURLProps) => { const [error, setError] = useState(''); + const [loginSuccess, setLoginSuccess] = useState(false); const style = getStyleSheet(theme); const intl = useIntl(); let customUrlScheme = Sso.REDIRECT_URL_SCHEME; @@ -69,6 +71,7 @@ const SSOWithRedirectURL = ({doSSOLogin, loginError, loginUrl, serverUrl, setLog const redirectUrl = customUrlScheme + 'callback'; const init = (resetErrors = true) => { + setLoginSuccess(false); if (resetErrors !== false) { setError(''); setLoginError(''); @@ -83,7 +86,7 @@ const SSOWithRedirectURL = ({doSSOLogin, loginError, loginUrl, serverUrl, setLog parsedUrl.set('query', qs.stringify(query)); const url = parsedUrl.toString(); - const onError = (e: unknown) => { + const onError = (e: Error) => { let message; if (e && Platform.OS === 'android' && isErrorWithMessage(e) && e.message.match(/no activity found to handle intent/i)) { message = intl.formatMessage({ @@ -111,6 +114,7 @@ const SSOWithRedirectURL = ({doSSOLogin, loginError, loginUrl, serverUrl, setLog const bearerToken = parsedUrl.query?.MMAUTHTOKEN; const csrfToken = parsedUrl.query?.MMCSRF; if (bearerToken && csrfToken) { + setLoginSuccess(true); doSSOLogin(bearerToken, csrfToken); } else { setError( @@ -134,52 +138,29 @@ const SSOWithRedirectURL = ({doSSOLogin, loginError, loginUrl, serverUrl, setLog }; }, []); + let content; + if (loginSuccess) { + content = (); + } else if (loginError || error) { + content = ( + + ); + } else { + content = (); + } + return ( - {loginError || error ? ( - - - - {`${loginError || error}.`} - - - - ) : ( - - - - - )} + {content} ); }; -export default SSOWithRedirectURL; +export default SSOAuthenticationWithExternalBrowser; diff --git a/app/screens/sso/sso_with_redirect_url.test.tsx b/app/screens/sso/sso_with_redirect_url.test.tsx deleted file mode 100644 index da079760184..00000000000 --- a/app/screens/sso/sso_with_redirect_url.test.tsx +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import React from 'react'; - -import Preferences from '@constants/preferences'; -import {renderWithIntl} from '@test/intl-test-helper'; - -import SSOWithRedirectURL from './sso_with_redirect_url'; - -jest.mock('@utils/url', () => { - return { - tryOpenURL: () => null, - }; -}); - -describe('SSO with redirect url', () => { - const baseProps = { - customUrlScheme: 'mmauth://', - doSSOLogin: jest.fn(), - intl: {}, - loginError: '', - loginUrl: '', - serverUrl: 'http://localhost:8065', - setLoginError: jest.fn(), - theme: Preferences.THEMES.denim, - }; - - test('should show message when user navigates to the page', () => { - const {getByTestId} = renderWithIntl(); - expect(getByTestId('mobile.oauth.switch_to_browser')).toBeDefined(); - }); - - test('should show "try again" and hide default message when error text is displayed', () => { - const {getByTestId} = renderWithIntl( - , - ); - expect(getByTestId('mobile.oauth.try_again')).toBeDefined(); - let browser; - try { - browser = getByTestId('mobile.oauth.switch_to_browser'); - } catch (error) { - // do nothing - } - expect(browser).toBeUndefined(); - }); -}); diff --git a/app/screens/sso/sso_with_webview.tsx b/app/screens/sso/sso_with_webview.tsx deleted file mode 100644 index f84df3f05b0..00000000000 --- a/app/screens/sso/sso_with_webview.tsx +++ /dev/null @@ -1,256 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import CookieManager, {type Cookies} from '@react-native-cookies/cookies'; -import React, {useEffect} from 'react'; -import {useIntl} from 'react-intl'; -import {Alert, Platform, Text, View} from 'react-native'; -import {WebView, WebViewMessageEvent, WebViewNavigation} from 'react-native-webview'; -import urlParse from 'url-parse'; - -import Loading from '@components/loading'; -import {Sso} from '@constants'; -import {popTopScreen} from '@screens/navigation'; -import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; - -interface SSOWithWebViewProps { - completeUrlPath: string; - doSSOLogin: (bearerToken: string, csrfToken: string) => void; - loginError: string; - loginUrl: string; - serverUrl: string; - ssoType: string; - theme: Theme; -} - -const HEADERS = { - 'X-Mobile-App': 'mattermost', -}; - -const postMessageJS = "window.postMessage(document.body.innerText, '*');"; - -// Used to make sure that OneLogin forms scale appropriately on both platforms. -const oneLoginFormScalingJS = ` - (function() { - var loginPage = document.getElementById('login-page'); - var submitButton = document.getElementById('user_submit'); - - if (loginPage) { - loginPage.setAttribute('style', 'background-repeat: repeat-y;'); - } - - function resetPadding() { - var mainBody = document.getElementById('body-main'); - - if (mainBody) { - mainBody.setAttribute('style', 'height: auto; padding: 10px 0;'); - } - - if (submitButton) { - submitButton.removeEventListener('click', resetPadding); - } - } - - resetPadding(); - - if (submitButton) { - submitButton.addEventListener('click', resetPadding); - } - })(); -`; - -const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => { - return { - container: { - flex: 1, - marginTop: Platform.select({android: 56}), - }, - errorContainer: { - alignItems: 'center', - flex: 1, - marginTop: 40, - }, - errorText: { - color: changeOpacity(theme.centerChannelColor, 0.4), - fontSize: 16, - lineHeight: 23, - paddingHorizontal: 30, - }, - }; -}); - -const SSOWithWebView = ({completeUrlPath, doSSOLogin, loginError, loginUrl, serverUrl, ssoType, theme}: SSOWithWebViewProps) => { - const style = getStyleSheet(theme); - const intl = useIntl(); - const [error, setError] = React.useState(null); - const [jsCode, setJSCode] = React.useState(''); - const visitedUrls = React.useRef(new Set()).current; - const [messagingEnabled, setMessagingEnabled] = React.useState(false); - const [shouldRenderWebView, setShouldRenderWebView] = React.useState(true); - const cookiesTimeout = React.useRef(); - const webView = React.useRef(null); - - useEffect(() => { - return () => { - if (cookiesTimeout.current) { - clearTimeout(cookiesTimeout.current); - } - }; - }, []); - - const removeCookiesFromVisited = () => { - if (Platform.OS === 'ios') { - visitedUrls.forEach((visited: string) => { - CookieManager.get(visited, true).then(async (cookies: Cookies) => { - if (cookies) { - const values = Object.values(cookies); - for (const cookie of values) { - CookieManager.clearByName(visited, cookie.name, true); - } - } - }); - }); - } - }; - - const extractCookie = (parsedUrl: urlParse) => { - try { - const original = urlParse(serverUrl); - - // Check whether we need to set a sub-path - parsedUrl.set('pathname', original.pathname || ''); - - // Rebuild the server url without query string and/or hash - const url = `${parsedUrl.origin}${parsedUrl.pathname}`; - - CookieManager.get(url, true).then((res: Cookies) => { - const mmtoken = res.MMAUTHTOKEN; - const csrf = res.MMCSRF; - const bearerToken = typeof mmtoken === 'object' ? mmtoken.value : mmtoken; - const csrfToken = typeof csrf === 'object' ? csrf.value : csrf; - - if (bearerToken) { - removeCookiesFromVisited(); - doSSOLogin(bearerToken, csrfToken); - if (cookiesTimeout.current) { - clearTimeout(cookiesTimeout.current); - } - setShouldRenderWebView(false); - } else if (webView.current && !error) { - webView.current.injectJavaScript(postMessageJS); - cookiesTimeout.current = setTimeout(extractCookie.bind(null, parsedUrl), 250); - } - }); - } catch (e) { - Alert.alert( - intl.formatMessage({ - id: 'mobile.oauth.something_wrong', - defaultMessage: 'Something went wrong', - }), - '', - [{ - text: intl.formatMessage({ - id: 'mobile.oauth.something_wrong.okButton', - defaultMessage: 'OK', - }), - onPress: () => { - popTopScreen(); - }, - }], - ); - } - }; - - const onMessage = (event: WebViewMessageEvent) => { - try { - const response = JSON.parse(event.nativeEvent.data); - if (response) { - const { - id, - message, - status_code: statusCode, - } = response; - if (id && message && statusCode !== 200) { - if (cookiesTimeout.current) { - clearTimeout(cookiesTimeout.current); - } - setError(message); - } - } - } catch (e) { - // do nothing - } - }; - - const onNavigationStateChange = (navState: WebViewNavigation) => { - const {url} = navState; - let isMessagingEnabled = false; - const parsed = urlParse(url); - if (!serverUrl.includes(parsed.host)) { - visitedUrls.add(parsed.origin); - } - - if (parsed.host.includes('.onelogin.com')) { - setJSCode(oneLoginFormScalingJS); - } else if (parsed.pathname === completeUrlPath) { - // To avoid `window.postMessage` conflicts in any of the SSO flows - // we enable the onMessage handler only When the webView navigates to the final SSO URL. - isMessagingEnabled = true; - } - setMessagingEnabled(isMessagingEnabled); - }; - - const onLoadEnd = (event: {nativeEvent: {url: string}}) => { - const url = event.nativeEvent.url; - const parsed = urlParse(url); - - let isLastRedirect = url.includes(completeUrlPath); - if (ssoType === Sso.SAML) { - isLastRedirect = isLastRedirect && !parsed.query; - } - - if (isLastRedirect) { - extractCookie(parsed); - } - }; - - const renderWebView = () => { - if (shouldRenderWebView) { - const userAgent = ssoType === Sso.GOOGLE ? 'Mozilla/5.0 (Linux; Android 10; Android SDK built for x86 Build/LMY48X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/608.2.11' : undefined; - return ( - true} - ref={webView} - source={{uri: loginUrl, headers: HEADERS}} - startInLoadingState={true} - userAgent={userAgent} - useSharedProcessPool={false} - /> - ); - } - return (); - }; - - return ( - - {error || loginError ? ( - - {error || loginError} - - ) : renderWebView()} - - ); -}; - -export default SSOWithWebView; diff --git a/app/screens/thread/thread.tsx b/app/screens/thread/thread.tsx index 5e879326eab..8cb015b3dd9 100644 --- a/app/screens/thread/thread.tsx +++ b/app/screens/thread/thread.tsx @@ -22,9 +22,9 @@ import NavigationStore from '@store/navigation_store'; import ThreadPostList from './thread_post_list'; +import type {KeyboardTrackingViewRef} from '@mattermost/keyboard-tracker'; import type PostModel from '@typings/database/models/servers/post'; import type {AvailableScreens} from '@typings/screens/navigation'; -import type {KeyboardTrackingViewRef} from 'react-native-keyboard-tracking-view'; type ThreadProps = { componentId: AvailableScreens; diff --git a/app/screens/user_profile/title/avatar.tsx b/app/screens/user_profile/title/avatar.tsx index 573d0887210..d694bb2518a 100644 --- a/app/screens/user_profile/title/avatar.tsx +++ b/app/screens/user_profile/title/avatar.tsx @@ -3,16 +3,17 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. + +import {Image} from 'expo-image'; import React, {useMemo} from 'react'; import {StyleSheet, View} from 'react-native'; -import FastImage from 'react-native-fast-image'; import Animated from 'react-native-reanimated'; import ProfilePicture from '@components/profile_picture'; import type UserModel from '@typings/database/models/servers/user'; -const AnimatedFastImage = Animated.createAnimatedComponent(FastImage); +const AnimatedImage = Animated.createAnimatedComponent(Image); type Props = { enablePostIconOverride: boolean; @@ -40,9 +41,7 @@ const UserProfileAvatar = ({enablePostIconOverride, forwardRef, imageSize, user, if (enablePostIconOverride && userIconOverride) { return ( - { + it('should return the binding unchanged if it is null', () => { + expect(cleanBinding(null as any, AppBindingLocations.COMMAND)).toBeNull(); + }); + + it('should handle default values for app_id, label, and location', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: '', + location: '', + label: '', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.COMMAND); + expect(result!.bindings![0].app_id).toBe('test_app'); + expect(result!.bindings![0].label).toBeTruthy(); + expect(result!.bindings![0].location).toMatch(/location\/.+/); + }); + + it('should remove bindings without app_id', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: '', + location: 'sub_location1', + label: 'sub_label1', + }, + { + app_id: 'sub_app', + location: 'sub_location2', + label: 'sub_label2', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.COMMAND); + expect(result!.bindings).toHaveLength(1); + expect(result!.bindings![0].app_id).toBe('sub_app'); + }); + + it('should remove bindings with empty or whitespace labels', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: 'sub_app1', + location: 'sub_location1', + label: '', + }, + { + app_id: 'sub_app2', + location: 'sub_location2', + label: ' ', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + { + app_id: 'sub_app3', + location: 'sub_location3', + label: 'valid_label', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.COMMAND); + expect(result!.bindings).toHaveLength(1); + expect(result!.bindings![0].label).toBe('valid_label'); + }); + + it('should remove bindings with duplicate labels in COMMAND location', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: 'sub_app1', + location: 'sub_location1', + label: 'sub_label', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + { + app_id: 'sub_app2', + location: 'sub_location2', + label: 'sub_label', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.COMMAND); + expect(result!.bindings).toHaveLength(1); + expect(result!.bindings![0].app_id).toBe('sub_app1'); + }); + + it('should keep unique labels in IN_POST location', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: 'sub_app1', + location: 'sub_location1', + label: 'sub_label1', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + { + app_id: 'sub_app2', + location: 'sub_location2', + label: 'sub_label2', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.IN_POST); + expect(result!.bindings).toHaveLength(2); + }); + + it('should remove invalid sub-bindings without form or submit', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: 'sub_app1', + location: 'sub_location1', + label: 'sub_label1', + }, + { + app_id: 'sub_app2', + location: 'sub_location2', + label: 'sub_label2', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + { + app_id: 'sub_app3', + location: 'sub_location3', + label: 'sub_label3', + submit: { + path: 'submit_path', + }, + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.COMMAND); + expect(result!.bindings).toHaveLength(2); + expect(result!.bindings![0].label).toBe('sub_label2'); + expect(result!.bindings![1].label).toBe('sub_label3'); + }); + + it('should handle forms correctly', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: 'sub_app', + location: 'sub_location', + label: 'sub_label', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.COMMAND); + expect(result!.bindings).toHaveLength(1); + expect(result!.bindings![0].form).toBeTruthy(); + }); + + it('should handle submit calls correctly', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: 'sub_app', + location: 'sub_location', + label: 'sub_label', + submit: { + path: 'submit_path', + }, + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.COMMAND); + expect(result!.bindings).toHaveLength(1); + expect(result!.bindings![0].submit).toBeTruthy(); + }); + + it('should recursively clean sub-bindings', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: 'sub_app', + location: 'sub_location', + label: 'sub_label', + bindings: [ + { + app_id: '', + location: 'sub_sub_location1', + label: '', + }, + { + app_id: 'sub_sub_app', + location: 'sub_sub_location2', + label: 'sub_sub_label', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + ], + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.COMMAND); + expect(result!.bindings).toHaveLength(1); + expect(result!.bindings![0].bindings).toHaveLength(1); + expect(result!.bindings![0].bindings![0].label).toBe('sub_sub_label'); + }); + + it('should handle bindings without bindings, form, or submit', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: 'sub_app', + location: 'sub_location', + label: 'sub_label', + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.COMMAND); + expect(result!.bindings).toHaveLength(0); + }); + + it('should handle multiple levels of nested bindings correctly', () => { + const binding: AppBinding = { + app_id: 'test_app', + location: 'location', + label: 'label', + bindings: [ + { + app_id: 'sub_app1', + location: 'sub_location1', + label: 'sub_label1', + bindings: [ + { + app_id: '', + location: 'sub_sub_location1', + label: '', + }, + { + app_id: 'sub_sub_app', + location: 'sub_sub_location2', + label: 'sub_sub_label', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + ], + }, + { + app_id: 'sub_app2', + location: 'sub_location2', + label: 'sub_label2', + form: { + submit: { + path: 'submit_path', + }, + }, + }, + ], + }; + + const result = cleanBinding(binding, AppBindingLocations.COMMAND); + expect(result!.bindings).toHaveLength(2); + expect(result!.bindings![0].bindings).toHaveLength(1); + expect(result!.bindings![0].bindings![0].label).toBe('sub_sub_label'); + expect(result!.bindings![1].label).toBe('sub_label2'); + }); +}); + +describe('validateBindings', () => { + it('should return an empty array if no bindings are provided', () => { + expect(validateBindings()).toEqual([]); + }); + + it('should filter and clean bindings by their locations', () => { + const bindings: AppBinding[] = [ + {app_id: '1', location: AppBindingLocations.CHANNEL_HEADER_ICON, label: 'channel_header', bindings: []}, + {app_id: '2', location: AppBindingLocations.POST_MENU_ITEM, label: 'post_menu', bindings: []}, + {app_id: '3', location: AppBindingLocations.COMMAND, label: 'command', bindings: []}, + {app_id: '4', location: 'other', label: 'other', bindings: []}, + ]; + + const result = validateBindings(bindings); + expect(result).toEqual([]); + }); + + it('should return only bindings that have sub-bindings after cleaning', () => { + const bindings: AppBinding[] = [ + {app_id: '1', location: AppBindingLocations.CHANNEL_HEADER_ICON, label: 'channel_header', bindings: []}, + {app_id: '2', + location: AppBindingLocations.POST_MENU_ITEM, + label: 'post_menu', + bindings: [{ + app_id: '2.1', + label: 'sub_binding', + location: '', + form: { + submit: { + path: 'path_2', + }, + }, + }]}, + {app_id: '3', + location: AppBindingLocations.COMMAND, + label: 'command', + bindings: [{ + app_id: '3.1', + label: 'sub_binding', + location: '', + form: { + submit: { + path: 'path_3', + }, + }, + }]}, + ]; + + const result = validateBindings(bindings); + expect(result).toHaveLength(2); + expect(result[0].app_id).toBe('2'); + expect(result[1].app_id).toBe('3'); + }); + + it('should filter out bindings that do not have sub-bindings after cleaning', () => { + const bindings: AppBinding[] = [ + {app_id: '1', + location: AppBindingLocations.CHANNEL_HEADER_ICON, + label: 'channel_header', + bindings: [{ + app_id: '1.1', + label: 'sub_binding', + location: '', + }]}, + {app_id: '2', location: AppBindingLocations.POST_MENU_ITEM, label: 'post_menu', bindings: []}, + {app_id: '3', location: AppBindingLocations.COMMAND, label: 'command', bindings: []}, + ]; + + const result = validateBindings(bindings); + expect(result).toEqual([]); + }); + + it('should handle bindings with various sub-bindings and forms correctly', () => { + const bindings: AppBinding[] = [ + { + app_id: '1', + location: AppBindingLocations.CHANNEL_HEADER_ICON, + label: 'channel_header', + bindings: [{ + app_id: '1.1', + label: 'sub_binding1', + location: '', + form: { + submit: { + path: 'path_1', + }, + }, + }]}, + { + app_id: '2', + location: AppBindingLocations.POST_MENU_ITEM, + label: 'post_menu', + bindings: [{ + app_id: '2.1', + label: 'sub_binding2', + location: '', + form: { + submit: { + path: 'path_2', + }, + }, + }]}, + {app_id: '3', location: AppBindingLocations.COMMAND, label: 'command', bindings: []}, + ]; + + const result = validateBindings(bindings); + expect(result).toHaveLength(2); + expect(result[0].app_id).toBe('2'); + expect(result[1].app_id).toBe('1'); + }); +}); + +describe('cleanForm', () => { + it('should return immediately if form is undefined', () => { + expect(() => cleanForm(undefined)).not.toThrow(); + }); + + it('should remove fields without names', () => { + const form: AppForm = { + fields: [ + {name: '', type: 'text'} as AppField, + {name: 'valid_name', type: 'text'} as AppField, + ], + }; + + cleanForm(form); + expect(form.fields).toHaveLength(1); + expect(form.fields![0].name).toBe('valid_name'); + }); + + it('should remove fields with names containing spaces or tabs', () => { + const form: AppForm = { + fields: [ + {name: 'invalid name', type: 'text'} as AppField, + {name: 'invalid\tname', type: 'text'} as AppField, + {name: 'valid_name', type: 'text'} as AppField, + ], + }; + + cleanForm(form); + expect(form.fields).toHaveLength(1); + expect(form.fields![0].name).toBe('valid_name'); + }); + + it('should remove fields with duplicate or invalid labels', () => { + const form: AppForm = { + fields: [ + {name: 'name1', type: 'text', label: 'label1'} as AppField, + {name: 'name2', type: 'text', label: 'label1'} as AppField, // Duplicate label + {name: 'name3', type: 'text', label: 'invalid label'} as AppField, + {name: 'name4', type: 'text'} as AppField, // No label, should use name + {name: 'name5', type: 'text', label: 'label5'} as AppField, + ], + }; + + cleanForm(form); + expect(form.fields).toHaveLength(3); + expect(form.fields![0].name).toBe('name1'); + expect(form.fields![1].name).toBe('name4'); + expect(form.fields![2].name).toBe('name5'); + }); + + it('should handle STATIC_SELECT fields and remove invalid options', () => { + const form: AppForm = { + fields: [ + { + name: 'select_field', + type: AppFieldTypes.STATIC_SELECT, + options: [ + {label: 'option1', value: 'value1'}, + {label: '', value: 'value2'}, + {label: 'option1', value: 'value3'}, + {label: 'option4', value: ''}, + ], + } as AppField, + ], + }; + + cleanForm(form); + expect(form.fields).toHaveLength(1); + expect(form.fields![0].options).toHaveLength(3); + }); + + it('should retain valid fields and options', () => { + const form: AppForm = { + fields: [ + {name: 'valid_name', type: 'text'} as AppField, + { + name: 'select_field', + type: AppFieldTypes.STATIC_SELECT, + options: [ + {label: 'option1', value: 'value1'}, + {label: 'option2', value: 'value2'}, + ], + } as AppField, + {name: 'dynamic_field_with_lookup', type: AppFieldTypes.DYNAMIC_SELECT, lookup: {path: 'lookup_path'}} as AppField, + ], + }; + + cleanForm(form); + expect(form.fields).toHaveLength(3); + }); +}); + +describe('makeCallErrorResponse', () => { + it('should create an error response object', () => { + const errorMessage = 'An error occurred'; + const errorResponse = makeCallErrorResponse(errorMessage); + + expect(errorResponse.type).toBe(AppCallResponseTypes.ERROR); + expect(errorResponse.text).toBe(errorMessage); + }); +}); + +describe('filterEmptyOptions', () => { + it('should filter out empty options', () => { + const options: AppSelectOption[] = [ + {label: 'Option 1', value: 'value1'}, + {label: 'Option 2', value: ' '}, + {label: 'Option 3', value: ''}, + {label: 'Option 4', value: 'value2'}, + ]; + + const filteredOptions = options.filter(filterEmptyOptions); + + // Check that empty options have been filtered out + expect(filteredOptions.length).toBe(2); + expect(filteredOptions.map((option) => option.label)).toEqual(['Option 1', 'Option 4']); + }); +}); + +describe('createCallContext', () => { + it('should create context with all parameters provided', () => { + const context = createCallContext('appID123', 'location123', 'channelID123', 'teamID123', 'postID123', 'rootID123'); + + expect(context).toEqual({ + app_id: 'appID123', + location: 'location123', + channel_id: 'channelID123', + team_id: 'teamID123', + post_id: 'postID123', + root_id: 'rootID123', + }); + }); + + it('should create context with only appID provided', () => { + const context = createCallContext('appID123'); + + expect(context).toEqual({ + app_id: 'appID123', + location: undefined, + channel_id: undefined, + team_id: undefined, + post_id: undefined, + root_id: undefined, + }); + }); + + it('should create context with some parameters provided', () => { + const context = createCallContext('appID123', 'location123', 'channelID123'); + + expect(context).toEqual({ + app_id: 'appID123', + location: 'location123', + channel_id: 'channelID123', + team_id: undefined, + post_id: undefined, + root_id: undefined, + }); + }); +}); + +describe('createCallRequest', () => { + const mockAppCall: AppCall = { + path: '/mock/path', + expand: { + app: 'all', + }, + }; + + const mockAppContext: AppContext = { + app_id: 'appID123', + location: 'location123', + channel_id: 'channelID123', + team_id: 'teamID123', + post_id: 'postID123', + root_id: 'rootID123', + }; + + const mockDefaultExpand: AppExpand = { + user: 'all', + post: 'none', + }; + + const mockValues: AppCallValues = { + key1: 'value1', + key2: 'value2', + }; + + it('should create call request with all parameters provided', () => { + const rawCommand = '/mock command'; + const request = createCallRequest(mockAppCall, mockAppContext, mockDefaultExpand, mockValues, rawCommand); + + expect(request).toEqual({ + ...mockAppCall, + context: mockAppContext, + values: mockValues, + expand: { + ...mockDefaultExpand, + ...mockAppCall.expand, + }, + raw_command: rawCommand, + }); + }); + + it('should create call request with required parameters only', () => { + const request = createCallRequest(mockAppCall, mockAppContext); + + expect(request).toEqual({ + ...mockAppCall, + context: mockAppContext, + expand: { + ...mockAppCall.expand, + }, + values: undefined, + raw_command: undefined, + }); + }); + + it('should create call request with default expand only', () => { + const request = createCallRequest(mockAppCall, mockAppContext, mockDefaultExpand); + + expect(request).toEqual({ + ...mockAppCall, + context: mockAppContext, + expand: { + ...mockDefaultExpand, + ...mockAppCall.expand, + }, + values: undefined, + raw_command: undefined, + }); + }); + + it('should create call request with values only', () => { + const request = createCallRequest(mockAppCall, mockAppContext, {}, mockValues); + + expect(request).toEqual({ + ...mockAppCall, + context: mockAppContext, + expand: { + ...mockAppCall.expand, + }, + values: mockValues, + raw_command: undefined, + }); + }); + + it('should create call request with raw command only', () => { + const rawCommand = '/mock command'; + const request = createCallRequest(mockAppCall, mockAppContext, {}, undefined, rawCommand); + + expect(request).toEqual({ + ...mockAppCall, + context: mockAppContext, + expand: { + ...mockAppCall.expand, + }, + values: undefined, + raw_command: rawCommand, + }); + }); + + it('should create call request with overridden expand values', () => { + const callWithExpandOverride: AppCall = { + ...mockAppCall, + expand: { + app: 'none', + user: 'summary', + }, + }; + const request = createCallRequest(callWithExpandOverride, mockAppContext, mockDefaultExpand); + + expect(request).toEqual({ + ...callWithExpandOverride, + context: mockAppContext, + expand: { + ...mockDefaultExpand, + ...callWithExpandOverride.expand, + }, + values: undefined, + raw_command: undefined, + }); + }); +}); + diff --git a/app/utils/apps.ts b/app/utils/apps.ts index cbdb26148a2..bd21068c690 100644 --- a/app/utils/apps.ts +++ b/app/utils/apps.ts @@ -1,16 +1,17 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. + import {AppBindingLocations, AppCallResponseTypes, AppFieldTypes} from '@constants/apps'; import {generateId} from './general'; -export function cleanBinding(binding: AppBinding, topLocation: string): AppBinding { +export function cleanBinding(binding: AppBinding, topLocation: string): AppBinding|null { return cleanBindingRec(binding, topLocation, 0); } -function cleanBindingRec(binding: AppBinding, topLocation: string, depth: number): AppBinding { +function cleanBindingRec(binding: AppBinding, topLocation: string, depth: number): AppBinding|null { if (!binding) { - return binding; + return null; } const toRemove: number[] = []; @@ -22,7 +23,7 @@ function cleanBindingRec(binding: AppBinding, topLocation: string, depth: number } if (!b.label) { - b.label = b.location || ''; + b.label = binding.label || b.location || ''; } if (!b.location) { diff --git a/app/utils/buttonStyles.test.ts b/app/utils/buttonStyles.test.ts new file mode 100644 index 00000000000..80836cc78c3 --- /dev/null +++ b/app/utils/buttonStyles.test.ts @@ -0,0 +1,142 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import Preferences from '@constants/preferences'; + +import {buttonBackgroundStyle, buttonStyles, getBackgroundStyles, buttonSizeStyles, buttonTextStyle, buttonTextStyles, buttonTextSizeStyles} from './buttonStyles'; +import {changeOpacity} from './theme'; + +describe('get the style of a button', () => { + const defaultStyle = buttonStyles.main; + const theme = Preferences.THEMES.denim; + const bgStyles = getBackgroundStyles(theme); + + test('button default values', () => { + const tests = [{ + getStyle: () => buttonBackgroundStyle(theme), + expected: [ + defaultStyle, + buttonSizeStyles.m, + bgStyles.primary.default.default, + ], + }, { + getStyle: () => buttonBackgroundStyle(theme, 'xs'), + expected: [ + defaultStyle, + buttonSizeStyles.xs, + bgStyles.primary.default.default, + ], + }, { + getStyle: () => buttonBackgroundStyle(theme, 'lg', 'secondary'), + expected: [ + defaultStyle, + buttonSizeStyles.lg, + bgStyles.secondary.default.default, + ], + }]; + + tests.forEach((t) => { + const style = t.getStyle(); + expect(style).toEqual(t.expected); + }); + }); + + test('button style', () => { + const btnEnphasis: ButtonEmphasis[] = ['primary', 'secondary', 'tertiary', 'link']; + const btnSizes: ButtonSize[] = ['lg', 'm', 's', 'xs']; + const btnTypes: ButtonType[] = ['default', 'destructive', 'disabled', 'inverted']; + const btnState: ButtonState[] = ['active', 'default', 'focus', 'hover']; + + btnEnphasis.forEach((emphasis) => { + btnSizes.forEach((size) => { + btnTypes.forEach((type) => { + btnState.forEach((state) => { + const style = buttonBackgroundStyle(theme, size, emphasis, type, state); + expect(style).toEqual([ + defaultStyle, + buttonSizeStyles[size], + bgStyles[emphasis][type][state], + ]); + }); + }); + }); + }); + }); +}); + +describe('get the text style of a button', () => { + const defaultTextStyle = buttonTextStyles.main; + const theme = Preferences.THEMES.denim; + + test('button text default values', () => { + const tests = [{ + getStyle: () => buttonTextStyle(theme), + expected: [ + defaultTextStyle, + buttonTextSizeStyles.m, + {color: theme.buttonColor}, + ], + }, { + getStyle: () => buttonTextStyle(theme, 'xs'), + expected: [ + defaultTextStyle, + buttonTextSizeStyles.xs, + {color: theme.buttonColor}, + ], + }, { + getStyle: () => buttonTextStyle(theme, 'lg', 'secondary'), + expected: [ + defaultTextStyle, + buttonTextSizeStyles.lg, + {color: theme.buttonBg}, + ], + }]; + + tests.forEach((t) => { + const style = t.getStyle(); + expect(style).toEqual(t.expected); + }); + }); + + test('button style', () => { + const btnEnphasis: ButtonEmphasis[] = ['primary', 'secondary', 'tertiary', 'link']; + const btnSizes: ButtonSize[] = ['lg', 'm', 's', 'xs']; + const btnTypes: ButtonType[] = ['default', 'destructive', 'disabled', 'inverted']; + + const getColor = (type: ButtonType, emphasis: ButtonEmphasis) => { + let color: string = theme.buttonColor; + + if (type === 'disabled') { + color = changeOpacity(theme.centerChannelColor, 0.32); + } + + if ((type === 'destructive' && emphasis !== 'primary')) { + color = theme.errorTextColor; + } + + if ((type === 'inverted' && emphasis === 'primary') || + (type !== 'inverted' && emphasis !== 'primary')) { + color = theme.buttonBg; + } + + if (type === 'inverted' && emphasis === 'tertiary') { + color = theme.sidebarText; + } + + return color; + }; + + btnEnphasis.forEach((emphasis) => { + btnSizes.forEach((size) => { + btnTypes.forEach((type) => { + const style = buttonTextStyle(theme, size, emphasis, type); + expect(style).toEqual([ + defaultTextStyle, + buttonTextSizeStyles[size], + {color: getColor(type, emphasis)}, + ]); + }); + }); + }); + }); +}); diff --git a/app/utils/buttonStyles.ts b/app/utils/buttonStyles.ts index e25049e6278..823520e9ede 100644 --- a/app/utils/buttonStyles.ts +++ b/app/utils/buttonStyles.ts @@ -5,37 +5,8 @@ import {type StyleProp, StyleSheet, type TextStyle, type ViewStyle} from 'react- import {blendColors, changeOpacity} from '@utils/theme'; -/** - * Returns the appropriate Style object for - * - * - * @param theme - * @param size - * @param emphasis - * @param type - * @param state - * @returns - */ -export const buttonBackgroundStyle = ( - theme: Theme, - size: ButtonSize = 'm', - emphasis: ButtonEmphasis = 'primary', - type: ButtonType = 'default', - state: ButtonState = 'default', -): StyleProp => { - const styles = StyleSheet.create({ - main: { - flex: 0, - alignItems: 'center', - justifyContent: 'center', - borderRadius: 4, - }, - fullWidth: { - width: '100%', - }, - }); - - const backgroundStyles: BackgroundStyles = { +export const getBackgroundStyles = (theme: Theme): BackgroundStyles => { + return { primary: { default: { default: { @@ -313,31 +284,102 @@ export const buttonBackgroundStyle = ( }, }, }; +}; - const sizes: ButtonSizes = StyleSheet.create({ - xs: { - height: 24, - paddingVertical: 6, - paddingHorizontal: 10, - }, - s: { - height: 32, - paddingVertical: 10, - paddingHorizontal: 16, - }, - m: { - height: 40, - paddingVertical: 12, - paddingHorizontal: 20, - }, - lg: { - height: 48, - paddingVertical: 14, - paddingHorizontal: 24, - }, - }); +export const buttonSizeStyles: ButtonSizes = StyleSheet.create({ + xs: { + height: 24, + paddingVertical: 6, + paddingHorizontal: 10, + }, + s: { + height: 32, + paddingVertical: 10, + paddingHorizontal: 16, + }, + m: { + height: 40, + paddingVertical: 12, + paddingHorizontal: 20, + }, + lg: { + height: 48, + paddingVertical: 14, + paddingHorizontal: 24, + }, +}); + +export const buttonStyles = StyleSheet.create({ + main: { + flex: 0, + alignItems: 'center', + justifyContent: 'center', + borderRadius: 4, + }, + fullWidth: { + width: '100%', + }, +}); + +export const buttonTextStyles = StyleSheet.create({ + main: { + fontFamily: 'OpenSans-SemiBold', + fontWeight: '600', + textAlignVertical: 'center', + alignItems: 'center', + justifyContent: 'center', + padding: 1, + }, + underline: { + textDecorationLine: 'underline', + }, +}); - return [styles.main, sizes[size], backgroundStyles[emphasis][type][state]]; +export const buttonTextSizeStyles = StyleSheet.create({ + xs: { + fontSize: 11, + lineHeight: 10, + letterSpacing: 0.02, + marginTop: 2, + }, + s: { + fontSize: 12, + lineHeight: 12, + marginTop: 1, + }, + m: { + fontSize: 14, + lineHeight: 14, + marginTop: 3, + }, + lg: { + fontSize: 16, + lineHeight: 18, + marginTop: 1, + }, +}); + +/** + * Returns the appropriate Style object for + * + * + * @param theme + * @param size + * @param emphasis + * @param type + * @param state + * @returns + */ +export const buttonBackgroundStyle = ( + theme: Theme, + size: ButtonSize = 'm', + emphasis: ButtonEmphasis = 'primary', + type: ButtonType = 'default', + state: ButtonState = 'default', +): StyleProp => { + const backgroundStyles = getBackgroundStyles(theme); + + return [buttonStyles.main, buttonSizeStyles[size], backgroundStyles[emphasis][type][state]]; }; /** @@ -376,43 +418,5 @@ export const buttonTextStyle = ( color = theme.sidebarText; } - const styles = StyleSheet.create({ - main: { - fontFamily: 'OpenSans-SemiBold', - fontWeight: '600', - textAlignVertical: 'center', - alignItems: 'center', - justifyContent: 'center', - padding: 1, - }, - underline: { - textDecorationLine: 'underline', - }, - }); - - const sizes = StyleSheet.create({ - xs: { - fontSize: 11, - lineHeight: 10, - letterSpacing: 0.02, - marginTop: 2, - }, - s: { - fontSize: 12, - lineHeight: 12, - marginTop: 1, - }, - m: { - fontSize: 14, - lineHeight: 14, - marginTop: 3, - }, - lg: { - fontSize: 16, - lineHeight: 18, - marginTop: 1, - }, - }); - - return [styles.main, sizes[size], {color}]; + return [buttonTextStyles.main, buttonTextSizeStyles[size], {color}]; }; diff --git a/app/utils/categories.test.ts b/app/utils/categories.test.ts new file mode 100644 index 00000000000..3f109c1dd11 --- /dev/null +++ b/app/utils/categories.test.ts @@ -0,0 +1,663 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +/* eslint-disable max-lines */ + +import {Preferences} from '@constants'; +import DatabaseManager from '@database/manager'; + +import { + makeCategoryChannelId, + isUnreadChannel, + filterArchivedChannels, + filterAutoclosedDMs, + filterManuallyClosedDms, + sortChannels, + getUnreadIds, + type ChannelWithMyChannel, +} from './categories'; + +import type {ServerDatabase} from '@typings/database/database'; +import type MyChannelModel from '@typings/database/models/servers/my_channel'; +import type PreferenceModel from '@typings/database/models/servers/preference'; +import type UserModel from '@typings/database/models/servers/user'; + +describe('Categories utils', () => { + const serverUrl = 'baseHandler.test.com'; + + const buildChannelsData = () => { + const dt1 = Date.now(); + const dt2 = Date.now() - (24 * 60 * 60 * 1000); + const dt3 = Date.now() - (2 * 24 * 60 * 60 * 1000); + const dt4 = Date.now() - (3 * 24 * 60 * 60 * 1000); + + const channels: Channel[] = [{ + id: 'dm1', + name: 'me__other1', + display_name: 'DM 1', + type: 'D', + create_at: dt2, + update_at: dt2, + delete_at: 0, + team_id: '123', + header: '', + purpose: '', + last_post_at: dt2, + creator_id: 'me', + total_msg_count: 20, + extra_update_at: 0, + shared: false, + scheme_id: null, + group_constrained: false, + }, { + id: 'dm2', + name: 'me__other2', + display_name: 'Zandoval 2', + type: 'D', + create_at: dt4, + update_at: dt4, + delete_at: 0, + team_id: '123', + header: '', + purpose: '', + last_post_at: dt4, + creator_id: 'me', + total_msg_count: 20, + extra_update_at: 0, + shared: false, + scheme_id: null, + group_constrained: false, + }, { + id: 'open-channel', + name: 'open-channel', + display_name: 'Open Channel', + type: 'O', + create_at: dt1, + update_at: dt1, + delete_at: 0, + team_id: '123', + header: '', + purpose: '', + last_post_at: dt1, + creator_id: 'me', + total_msg_count: 20, + extra_update_at: 0, + shared: false, + scheme_id: null, + group_constrained: false, + }, { + id: 'gm1', + name: 'the_gm_channel_name', + display_name: 'Mario, Persona 2, Persona 3', + type: 'G', + create_at: dt3, + update_at: dt3, + delete_at: 0, + team_id: '123', + header: '', + purpose: '', + last_post_at: dt3, + creator_id: 'me', + total_msg_count: 20, + extra_update_at: 0, + shared: false, + scheme_id: null, + group_constrained: false, + }]; + const myChannels: ChannelMembership[] = [ + { + id: 'dm1', + user_id: 'me', + channel_id: 'dm1', + last_post_at: dt2, + last_viewed_at: dt2, + last_update_at: dt2, + mention_count: 0, + msg_count: 20, + roles: 'user', + notify_props: { + desktop: 'default', + email: 'default', + mark_unread: 'mention', + push: 'mention', + ignore_channel_mentions: 'default', + }, + }, + { + id: 'dm2', + user_id: 'me', + channel_id: 'dm2', + last_post_at: dt4, + last_viewed_at: dt4, + last_update_at: dt4, + mention_count: 3, + msg_count: 23, + roles: 'user', + notify_props: { + desktop: 'default', + email: 'default', + mark_unread: 'mention', + push: 'mention', + ignore_channel_mentions: 'default', + }, + }, { + id: 'open-channel', + user_id: 'me', + channel_id: 'open-channel', + last_post_at: dt1, + last_viewed_at: dt1, + last_update_at: dt1, + mention_count: 1, + msg_count: 21, + roles: 'user', + notify_props: { + desktop: 'default', + email: 'default', + mark_unread: 'all', + push: 'mention', + ignore_channel_mentions: 'default', + }, + }, { + id: 'gm1', + user_id: 'me', + channel_id: 'gm1', + last_post_at: dt3, + last_viewed_at: dt3, + last_update_at: dt3, + mention_count: 0, + msg_count: 0, + roles: 'user', + notify_props: { + desktop: 'default', + email: 'default', + mark_unread: 'mention', + push: 'mention', + ignore_channel_mentions: 'default', + }, + }, + ]; + + return {channels, myChannels}; + }; + + const createChannelsDbRecords = async (db: ServerDatabase, channels: Channel[], myChannels: ChannelMembership[]): Promise => { + const channelModels = await db.operator.handleChannel({channels, prepareRecordsOnly: false}); + const myChannelModels = await db.operator.handleMyChannel({channels, myChannels, prepareRecordsOnly: false}); + return channelModels.map((channel, index) => { + const myChannel = myChannelModels[index] as MyChannelModel; + return { + channel, + myChannel, + sortOrder: index, + }; + }); + }; + + beforeEach(async () => { + await DatabaseManager.init([serverUrl]); + }); + + afterEach(() => { + DatabaseManager.destroyServerDatabase(serverUrl); + }); + + test('makeCategoryChannelId', () => { + const teamId = 'my-team-id'; + const channelId = 'my-channel-id'; + const category = makeCategoryChannelId(teamId, channelId); + expect(category).toBe(`${teamId}_${channelId}`); + }); + + test('isUnreadChannel', async () => { + const db = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + + const channels: Channel[] = [{ + id: 'c', + name: 'channel', + display_name: 'Channel', + type: 'O', + create_at: 1, + update_at: 1, + delete_at: 0, + team_id: '123', + header: '', + purpose: '', + last_post_at: 2, + creator_id: 'me', + total_msg_count: 20, + extra_update_at: 0, + shared: false, + scheme_id: null, + group_constrained: false, + }]; + const myChannels: ChannelMembership[] = [ + { + id: 'c', + user_id: 'me', + channel_id: 'c', + last_post_at: 1617311494451, + last_viewed_at: 1617311494451, + last_update_at: 1617311494451, + mention_count: 3, + msg_count: 10, + roles: 'guest', + notify_props: { + desktop: 'default', + email: 'default', + mark_unread: 'mention', + push: 'mention', + ignore_channel_mentions: 'default', + }, + }, + ]; + + const models = await db.operator.handleMyChannel({channels, myChannels, isCRTEnabled: false, prepareRecordsOnly: false}); + expect(models).toHaveLength(1); + const myChannel = models[0] as MyChannelModel; + let isUnread = isUnreadChannel(myChannel); + expect(isUnread).toBe(true); + await db.database.write(async () => { + await myChannel.update((record) => { + record.mentionsCount = 0; + }); + }); + + isUnread = isUnreadChannel(myChannel); + expect(isUnread).toBe(true); + + const notifyProps: Partial = {mark_unread: 'mention'}; + isUnread = isUnreadChannel(myChannel, notifyProps); + expect(isUnread).toBe(false); + + isUnread = isUnreadChannel(myChannel, notifyProps, myChannel.id); + expect(isUnread).toBe(true); + }); + + test('filterArchivedChannels', async () => { + const db = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const channels: Channel[] = [{ + id: 'channel_1', + name: 'channel_1', + display_name: 'Channel 1', + type: 'O', + create_at: 1, + update_at: 1, + delete_at: 0, + team_id: '123', + header: '', + purpose: '', + last_post_at: 2, + creator_id: 'me', + total_msg_count: 20, + extra_update_at: 0, + shared: false, + scheme_id: null, + group_constrained: false, + }, { + id: 'channel_2', + name: 'channel_2', + display_name: 'Channel 2', + type: 'O', + create_at: 1, + update_at: 1, + delete_at: 123, + team_id: '123', + header: '', + purpose: '', + last_post_at: 2, + creator_id: 'me', + total_msg_count: 20, + extra_update_at: 0, + shared: false, + scheme_id: null, + group_constrained: false, + }]; + const myChannels: ChannelMembership[] = [ + { + id: 'channel_1', + user_id: 'me', + channel_id: 'channel_1', + last_post_at: 1617311494451, + last_viewed_at: 1617311494451, + last_update_at: 1617311494451, + mention_count: 3, + msg_count: 10, + roles: 'user', + notify_props: { + desktop: 'default', + email: 'default', + mark_unread: 'mention', + push: 'mention', + ignore_channel_mentions: 'default', + }, + }, + { + id: 'channel_2', + user_id: 'me', + channel_id: 'channel_2', + last_post_at: 1617311494451, + last_viewed_at: 1617311494451, + last_update_at: 1617311494451, + mention_count: 3, + msg_count: 10, + roles: 'user', + notify_props: { + desktop: 'default', + email: 'default', + mark_unread: 'mention', + push: 'mention', + ignore_channel_mentions: 'default', + }, + }, + ]; + + const channelModels = await db.operator.handleChannel({channels, prepareRecordsOnly: false}); + const myChannelModels = await db.operator.handleMyChannel({channels, myChannels, prepareRecordsOnly: false}); + const data: ChannelWithMyChannel[] = [{ + channel: channelModels[0], + myChannel: myChannelModels[0] as MyChannelModel, + sortOrder: 0, + }, { + channel: channelModels[1], + myChannel: myChannelModels[1] as MyChannelModel, + sortOrder: 1, + }]; + let archived = filterArchivedChannels(data, ''); + expect(archived).toHaveLength(1); + + archived = filterArchivedChannels(data, channels[1].id); + expect(archived).toHaveLength(2); + }); + + test('filterAutoclosedDMs', async () => { + const db = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + + let result = filterAutoclosedDMs('channels', 3, 'me', '', [], [], {}); + expect(result).toEqual([]); + + const now = Date.now(); + const dt_chan1 = now - (3 * 24 * 60 * 60 * 1000); + const dt_chan2 = now - (2 * 24 * 60 * 60 * 1000); + const autoclosePrefs = [{ + id: 'pref1', + userId: 'me', + category: Preferences.CATEGORIES.CHANNEL_APPROXIMATE_VIEW_TIME, + name: 'dm1', + value: `${dt_chan1}`, + }, { + id: 'pref2', + userId: 'me', + category: Preferences.CATEGORIES.CHANNEL_APPROXIMATE_VIEW_TIME, + name: 'dm2', + value: `${dt_chan2}`, + }] as PreferenceModel[]; + + const channels: Channel[] = [{ + id: 'dm1', + name: 'me__other1', + display_name: 'DM 1', + type: 'D', + create_at: 1, + update_at: 1, + delete_at: 0, + team_id: '123', + header: '', + purpose: '', + last_post_at: dt_chan1, + creator_id: 'me', + total_msg_count: 20, + extra_update_at: 0, + shared: false, + scheme_id: null, + group_constrained: false, + }, { + id: 'dm2', + name: 'me__other2', + display_name: 'DM 2', + type: 'D', + create_at: 1, + update_at: 1, + delete_at: 0, + team_id: '123', + header: '', + purpose: '', + last_post_at: dt_chan2, + creator_id: 'me', + total_msg_count: 20, + extra_update_at: 0, + shared: false, + scheme_id: null, + group_constrained: false, + }]; + const myChannels: ChannelMembership[] = [ + { + id: 'dm1', + user_id: 'me', + channel_id: 'dm1', + last_post_at: dt_chan1, + last_viewed_at: dt_chan1, + last_update_at: dt_chan1, + mention_count: 0, + msg_count: 20, + roles: 'user', + notify_props: { + desktop: 'default', + email: 'default', + mark_unread: 'mention', + push: 'mention', + ignore_channel_mentions: 'default', + }, + }, + { + id: 'dm2', + user_id: 'me', + channel_id: 'dm2', + last_post_at: dt_chan2, + last_viewed_at: dt_chan2, + last_update_at: dt_chan2, + mention_count: 3, + msg_count: 10, + roles: 'user', + notify_props: { + desktop: 'default', + email: 'default', + mark_unread: 'mention', + push: 'mention', + ignore_channel_mentions: 'default', + }, + }, + ]; + + const channelModels = await db.operator.handleChannel({channels, prepareRecordsOnly: false}); + const myChannelModels = await db.operator.handleMyChannel({channels, myChannels, prepareRecordsOnly: false}); + const data: ChannelWithMyChannel[] = [{ + channel: channelModels[0], + myChannel: myChannelModels[0] as MyChannelModel, + sortOrder: 0, + }, { + channel: channelModels[1], + myChannel: myChannelModels[1] as MyChannelModel, + sortOrder: 0, + }]; + + result = filterAutoclosedDMs('direct_messages', 3, 'me', '', data, autoclosePrefs, {}); + expect(result.length).toEqual(2); + + result = filterAutoclosedDMs('direct_messages', 3, 'me', 'dm1', data, autoclosePrefs, {}); + expect(result.length).toEqual(2); + + result = filterAutoclosedDMs('direct_messages', 3, 'me', 'dm2', data, autoclosePrefs, {}); + expect(result.length).toEqual(2); + + const lastViewedData: ChannelWithMyChannel[] = [{ + ...data[0], + myChannel: { + ...data[0].myChannel, + lastViewedAt: 0, + } as MyChannelModel, + }, data[1]]; + + const autoclosePrefsNotViewed = [autoclosePrefs[1]]; + result = filterAutoclosedDMs('direct_messages', 3, 'me', '', lastViewedData, autoclosePrefsNotViewed, {}); + expect(result.length).toEqual(1); + + const deactivated = new Map(); + deactivated.set('other1', { + id: 'other1', + deleteAt: dt_chan1 + 1, + } as UserModel); + + result = filterAutoclosedDMs('direct_messages', 3, 'me', '', data, autoclosePrefs, {}, deactivated); + expect(result.length).toEqual(1); + + result = filterAutoclosedDMs('direct_messages', 3, 'me', '', data, autoclosePrefs, {}, undefined, 'dm2'); + expect(result[0].channel.id).toEqual('dm2'); + + const mockNotUnread: ChannelWithMyChannel[] = [data[0], { + ...data[1], + myChannel: { + id: data[1].myChannel.id, + lastViewedAt: 0, + isUnread: false, + } as MyChannelModel, + }]; + result = filterAutoclosedDMs('direct_messages', 3, 'me', '', mockNotUnread, autoclosePrefs, {}, undefined, 'dm1'); + expect(result[0].channel.id).toEqual('dm1'); + + const mockRecent1: ChannelWithMyChannel[] = [{ + ...data[0], + myChannel: { + id: data[0].myChannel.id, + lastViewedAt: 2, + isUnread: false, + } as MyChannelModel, + }, { + ...data[1], + myChannel: { + id: data[1].myChannel.id, + lastViewedAt: 1, + isUnread: false, + } as MyChannelModel, + }]; + + result = filterAutoclosedDMs('direct_messages', 3, 'me', '', mockRecent1, [], {}); + expect(result[0].channel.id).toEqual('dm1'); + + const mockRecent2: ChannelWithMyChannel[] = [{ + ...data[0], + myChannel: { + id: data[0].myChannel.id, + lastViewedAt: 1, + isUnread: false, + } as MyChannelModel, + }, { + ...data[1], + myChannel: { + id: data[1].myChannel.id, + lastViewedAt: 2, + isUnread: false, + } as MyChannelModel, + }]; + + result = filterAutoclosedDMs('direct_messages', 3, 'me', '', mockRecent2, [], {}); + expect(result[0].channel.id).toEqual('dm2'); + + const mockSameLastViewed: ChannelWithMyChannel[] = [{ + ...data[0], + myChannel: { + id: data[0].myChannel.id, + lastViewedAt: 1, + isUnread: false, + } as MyChannelModel, + }, { + ...data[1], + myChannel: { + id: data[1].myChannel.id, + lastViewedAt: 1, + isUnread: false, + } as MyChannelModel, + }]; + + result = filterAutoclosedDMs('direct_messages', 3, 'me', '', mockSameLastViewed, [], {}); + expect(result[0].channel.id).toEqual('dm1'); + }); + + test('filterManuallyClosedDms', async () => { + const db = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + + const closedDMsPrefs = [{ + id: 'pref1', + userId: 'me', + category: Preferences.CATEGORIES.DIRECT_CHANNEL_SHOW, + name: 'dm1', + value: 'true', + }, { + id: 'pref2', + userId: 'me', + category: Preferences.CATEGORIES.DIRECT_CHANNEL_SHOW, + name: 'dm2', + value: 'true', + }, { + id: 'pref3', + userId: 'me', + category: Preferences.CATEGORIES.GROUP_CHANNEL_SHOW, + name: 'gm1', + value: 'false', + }] as PreferenceModel[]; + + const {channels, myChannels} = buildChannelsData(); + const data = await createChannelsDbRecords(db, channels, myChannels); + + const notifyProps = myChannels.reduce>>((obj, m) => { + obj[m.channel_id] = m.notify_props; + return obj; + }, {}); + + const result = filterManuallyClosedDms(data, notifyProps, closedDMsPrefs, 'me'); + expect(result.length).toEqual(3); + }); + + test('sortChannels', async () => { + const db = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + + const {channels, myChannels} = buildChannelsData(); + const data = await createChannelsDbRecords(db, channels, myChannels); + + const notifyProps = myChannels.reduce>>((obj, m) => { + obj[m.channel_id] = m.notify_props; + return obj; + }, {}); + + let result = sortChannels('recent', data, notifyProps, 'en'); + const recentIds = result.map((r) => r.id); + expect(recentIds).toEqual(['open-channel', 'dm1', 'gm1', 'dm2']); + + result = sortChannels('manual', data, notifyProps, 'en'); + const manualIds = result.map((r) => r.id); + expect(manualIds).toEqual(['dm1', 'dm2', 'open-channel', 'gm1']); + + result = sortChannels('alpha', data, notifyProps, 'en'); + const alphaIds = result.map((r) => r.id); + expect(alphaIds).toEqual(['open-channel', 'dm1', 'gm1', 'dm2']); + }); + + test('getUnreadIds', async () => { + const db = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + + const {channels, myChannels} = buildChannelsData(); + const data = await createChannelsDbRecords(db, channels, myChannels); + + const notifyProps = myChannels.reduce>>((obj, m) => { + obj[m.channel_id] = m.notify_props; + return obj; + }, {}); + + let result = getUnreadIds(data, notifyProps); + let ids = Array.from(result); + expect(ids).toEqual(['dm2', 'open-channel']); + + result = getUnreadIds(data, notifyProps, 'dm1'); + ids = Array.from(result); + expect(ids).toEqual(['dm1', 'dm2', 'open-channel']); + }); +}); diff --git a/app/utils/categories.ts b/app/utils/categories.ts index 91f9afadc17..810a902cee7 100644 --- a/app/utils/categories.ts +++ b/app/utils/categories.ts @@ -24,7 +24,7 @@ export function makeCategoryChannelId(teamId: string, channelId: string) { export const isUnreadChannel = (myChannel: MyChannelModel, notifyProps?: Partial, lastUnreadChannelId?: string) => { const isMuted = notifyProps?.mark_unread === General.MENTION; - return myChannel.mentionsCount || (!isMuted && myChannel.isUnread) || (myChannel.id === lastUnreadChannelId); + return Boolean(myChannel.mentionsCount) || (!isMuted && myChannel.isUnread) || (myChannel.id === lastUnreadChannelId); }; export const filterArchivedChannels = (channelsWithMyChannel: ChannelWithMyChannel[], currentChannelId: string) => { diff --git a/app/utils/channel/index.test.ts b/app/utils/channel/index.test.ts new file mode 100644 index 00000000000..87a2cfec8ff --- /dev/null +++ b/app/utils/channel/index.test.ts @@ -0,0 +1,246 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {createIntl} from 'react-intl'; + +import {Channel, General, Permissions} from '@constants'; +import {hasPermission} from '@utils/role'; + +import {compareNotifyProps, filterChannelsMatchingTerm, generateChannelNameFromDisplayName, getDirectChannelName, isArchived, isDMorGM, isTypeDMorGM, selectDefaultChannelForTeam, sortChannelsByDisplayName, sortChannelsModelByDisplayName, validateDisplayName} from '.'; + +import type ChannelModel from '@typings/database/models/servers/channel'; + +jest.mock('@utils/role', () => ({ + hasPermission: jest.fn(() => true), +})); + +jest.mock('@utils/general', () => ({ + generateId: jest.fn(() => 'generated-id'), +})); + +describe('getDirectChannelName', () => { + it('should return the correct direct channel name', () => { + expect(getDirectChannelName('id1', 'id2')).toBe('id1__id2'); + expect(getDirectChannelName('id2', 'id1')).toBe('id1__id2'); + }); +}); + +describe('isDMorGM', () => { + it('should return true for DM or GM channels', () => { + expect(isDMorGM({type: General.DM_CHANNEL} as Channel)).toBe(true); + expect(isDMorGM({type: General.GM_CHANNEL} as Channel)).toBe(true); + }); + + it('should return false for other channel types', () => { + expect(isDMorGM({type: General.OPEN_CHANNEL} as Channel)).toBe(false); + }); +}); + +describe('isTypeDMorGM', () => { + it('should return true for DM or GM channel types', () => { + expect(isTypeDMorGM(General.DM_CHANNEL)).toBe(true); + expect(isTypeDMorGM(General.GM_CHANNEL)).toBe(true); + }); + + it('should return false for other channel types', () => { + expect(isTypeDMorGM(General.OPEN_CHANNEL)).toBe(false); + expect(isTypeDMorGM(undefined)).toBe(false); + }); +}); + +describe('isArchived', () => { + it('should return true if channel is archived', () => { + expect(isArchived({delete_at: 12345} as Channel)).toBe(true); + expect(isArchived({deleteAt: 12345} as ChannelModel)).toBe(true); + }); + + it('should return false if channel is not archived', () => { + expect(isArchived({delete_at: 0} as Channel)).toBe(false); + expect(isArchived({deleteAt: 0} as ChannelModel)).toBe(false); + }); +}); + +describe('selectDefaultChannelForTeam', () => { + const channels = [ + {id: '1', name: General.DEFAULT_CHANNEL, team_id: 'team1', type: General.OPEN_CHANNEL}, + {id: '2', name: 'random', team_id: 'team1', type: General.OPEN_CHANNEL}, + ] as Channel[]; + + const memberships = [ + {channel_id: '2'}, + ] as ChannelMembership[]; + + const roles = [ + {permissions: [Permissions.JOIN_PUBLIC_CHANNELS]}, + ] as Role[]; + + it('should select the default channel if user is a member', () => { + const result = selectDefaultChannelForTeam(channels, memberships, 'team1', roles); + expect(result).toEqual(channels[0]); + + const channelModels = [ + {id: '1', name: General.DEFAULT_CHANNEL, teamId: 'team1', type: General.OPEN_CHANNEL}, + {id: '2', name: 'random', teamId: 'team1', type: General.OPEN_CHANNEL}, + ] as ChannelModel[]; + const result2 = selectDefaultChannelForTeam(channelModels, memberships, 'team1', roles); + expect(result2).toEqual(channelModels[0]); + }); + + it('should select the first channel in the team if user can join public channels', () => { + const result = selectDefaultChannelForTeam(channels, [], 'team1', roles); + expect(result).toEqual(channels[0]); + }); + + it('should select the first channel in the team if user cannot join public channels', () => { + (hasPermission as jest.Mock).mockReturnValueOnce(false); + const result = selectDefaultChannelForTeam(channels, memberships, 'team1', roles); + expect(result).toEqual(channels[1]); + }); + + it('should select the default channel in the team if user cannot join public channels', () => { + (hasPermission as jest.Mock).mockReturnValueOnce(false); + const memberOf = [ + {channel_id: '1'}, + ] as ChannelMembership[]; + const result = selectDefaultChannelForTeam(channels, memberOf, 'team1', roles); + expect(result).toEqual(channels[0]); + }); + + it('should return undefined if no channels are available', () => { + const result = selectDefaultChannelForTeam([], [], 'team1', roles); + expect(result).toBeUndefined(); + }); +}); + +describe('sortChannelsByDisplayName', () => { + it('should sort channels by display name', () => { + const channels = [ + {name: 'name1', display_name: 'Zeta'}, + {name: 'name2', display_name: 'Alpha'}, + ] as Channel[]; + + const channelsModels = [ + {name: 'name1', displayName: 'Zeta'}, + {name: 'name2', displayName: 'Alpha'}, + ] as ChannelModel[]; + + const result = channels.sort((a, b) => sortChannelsByDisplayName('en', a, b)); + expect(result[0].name).toBe('name2'); + + const result2 = channelsModels.sort((a, b) => sortChannelsByDisplayName('en', a, b)); + expect(result2[0].name).toBe('name2'); + }); + + it('should sort channels by name if display name is not defined', () => { + const channels = [ + {name: 'Zeta'}, + {name: 'Alpha'}, + ] as Channel[]; + + const result = channels.sort((a, b) => sortChannelsByDisplayName('en', a, b)); + expect(result[0].name).toBe('Alpha'); + }); +}); + +describe('sortChannelsModelByDisplayName', () => { + it('should sort channel models by display name', () => { + const channels = [ + {name: 'name1', displayName: 'Zeta'}, + {name: 'name2', displayName: 'Alpha'}, + ] as ChannelModel[]; + + const result = channels.sort((a, b) => sortChannelsModelByDisplayName('en', a, b)); + expect(result[0].name).toBe('name2'); + }); + + it('should sort channel models by name if display name is not defined', () => { + const channels = [ + {name: 'Zeta'}, + {name: 'Alpha'}, + ] as ChannelModel[]; + + const result = channels.sort((a, b) => sortChannelsModelByDisplayName('en', a, b)); + expect(result[0].name).toBe('Alpha'); + }); +}); + +describe('validateDisplayName', () => { + const intl = createIntl({locale: 'en', messages: {}}); + it('should return an error if display name is empty', () => { + const result = validateDisplayName(intl, ''); + expect(result.error).toBe('Channel name is required'); + }); + + it('should return an error if display name is too long', () => { + const result = validateDisplayName(intl, 'a'.repeat(100)); + expect(result.error).toBe('Channel name must be less than 64 characters'); + }); + + it('should return an error if display name is too short', () => { + const minLength = Channel.MIN_CHANNEL_NAME_LENGTH; + Channel.MIN_CHANNEL_NAME_LENGTH = 2; + const result = validateDisplayName(intl, 'a'); + expect(result.error).toBe('Channel name must be 2 or more characters'); + Channel.MIN_CHANNEL_NAME_LENGTH = minLength; + }); + + it('should return no error if display name is valid', () => { + const result = validateDisplayName(intl, 'valid name'); + expect(result.error).toBe(''); + }); +}); + +describe('generateChannelNameFromDisplayName', () => { + it('should generate a channel name from display name', () => { + const result = generateChannelNameFromDisplayName('Valid Name'); + expect(result).toBe('valid-name'); + }); + + it('should generate an ID if display name is empty after cleanup', () => { + const result = generateChannelNameFromDisplayName(''); + expect(result).toBe('generated-id'); + }); +}); + +describe('compareNotifyProps', () => { + it('should return true if notify props are equal', () => { + const propsA: Partial = {desktop: 'default', email: 'default', mark_unread: 'all', push: 'default', ignore_channel_mentions: 'default'}; + const propsB = {...propsA}; + expect(compareNotifyProps(propsA, propsB)).toBe(true); + }); + + it('should return false if notify props are different', () => { + const propsA: Partial = {desktop: 'default', email: 'default', mark_unread: 'all', push: 'default', ignore_channel_mentions: 'default'}; + const propsB: Partial = {...propsA, desktop: 'none'}; + expect(compareNotifyProps(propsA, propsB)).toBe(false); + }); +}); + +describe('filterChannelsMatchingTerm', () => { + const channels = [ + {name: 'channel1', display_name: 'Channel One'}, + {name: 'channel2', display_name: 'Channel Two'}, + {display_name: 'Undefined name'}, + {}, + ] as Channel[]; + + it('should filter channels by name or display name', () => { + let result = filterChannelsMatchingTerm(channels, 'channel1'); + expect(result.length).toBe(1); + expect(result[0].name).toBe('channel1'); + + result = filterChannelsMatchingTerm(channels, 'Channel One'); + expect(result.length).toBe(1); + expect(result[0].display_name).toBe('Channel One'); + + result = filterChannelsMatchingTerm([...channels, undefined] as Channel[], 'Channel One'); + expect(result.length).toBe(1); + expect(result[0].display_name).toBe('Channel One'); + }); + + it('should return an empty array if no channels match the term', () => { + const result = filterChannelsMatchingTerm(channels, 'nonexistent'); + expect(result.length).toBe(0); + }); +}); + diff --git a/app/utils/channel/index.ts b/app/utils/channel/index.ts index d1ed84125bf..c896e9ad0f3 100644 --- a/app/utils/channel/index.ts +++ b/app/utils/channel/index.ts @@ -1,15 +1,15 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {defineMessages, type IntlShape} from 'react-intl'; + import {Channel, General, Permissions} from '@constants'; -import {t, DEFAULT_LOCALE} from '@i18n'; +import {DEFAULT_LOCALE} from '@i18n'; +import {generateId} from '@utils/general'; import {hasPermission} from '@utils/role'; - -import {generateId} from '../general'; -import {cleanUpUrlable} from '../url'; +import {cleanUpUrlable} from '@utils/url'; import type ChannelModel from '@typings/database/models/servers/channel'; -import type {IntlShape} from 'react-intl'; export function getDirectChannelName(id: string, otherId: string): string { let handle; @@ -83,20 +83,20 @@ export function sortChannelsModelByDisplayName(locale: string, a: ChannelModel, return a.name.toLowerCase().localeCompare(b.name.toLowerCase(), locale, {numeric: true}); } -const displayNameValidationMessages = { +const displayNameValidationMessages = defineMessages({ display_name_required: { - id: t('mobile.rename_channel.display_name_required'), + id: 'mobile.rename_channel.display_name_required', defaultMessage: 'Channel name is required', }, display_name_maxLength: { - id: t('mobile.rename_channel.display_name_maxLength'), + id: 'mobile.rename_channel.display_name_maxLength', defaultMessage: 'Channel name must be less than {maxLength, number} characters', }, display_name_minLength: { - id: t('mobile.rename_channel.display_name_minLength'), + id: 'mobile.rename_channel.display_name_minLength', defaultMessage: 'Channel name must be {minLength, number} or more characters', }, -}; +}); export const validateDisplayName = (intl: IntlShape, displayName: string): {error: string} => { let errorMessage; @@ -117,6 +117,7 @@ export const validateDisplayName = (intl: IntlShape, displayName: string): {erro default: errorMessage = ''; + break; } return {error: errorMessage}; }; diff --git a/app/utils/config.test.ts b/app/utils/config.test.ts new file mode 100644 index 00000000000..2caf194a728 --- /dev/null +++ b/app/utils/config.test.ts @@ -0,0 +1,15 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {hasReliableWebsocket} from './config'; + +describe('Config utilities', () => { + test('hasReliableWebsocket', () => { + expect(hasReliableWebsocket('5.8.0')).toBe(false); + expect(hasReliableWebsocket('6.4.0', 'false')).toBe(false); + expect(hasReliableWebsocket('6.4.0', 'true')).toBe(true); + expect(hasReliableWebsocket('9.4.0', 'false')).toBe(true); + expect(hasReliableWebsocket('9.4.0', 'true')).toBe(true); + expect(hasReliableWebsocket('9.4.0')).toBe(true); + }); +}); diff --git a/app/utils/datetime.test.ts b/app/utils/datetime.test.ts new file mode 100644 index 00000000000..8244c201580 --- /dev/null +++ b/app/utils/datetime.test.ts @@ -0,0 +1,37 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {isSameDate, isSameMonth, isSameYear, isToday, isYesterday} from './datetime'; + +describe('Datetime', () => { + test('isSameDate (isSameMonth / isSameYear)', () => { + expect(isSameDate(new Date('2024-03-28 02:23:27'), new Date('2025-03-28 02:23:27'))).toBe(false); + expect(isSameDate(new Date('2024-03-28 02:23:27'), new Date('2024-02-28 02:23:27'))).toBe(false); + expect(isSameDate(new Date('2024-03-28 02:23:27'), new Date('2024-03-18 02:23:27'))).toBe(false); + expect(isSameDate(new Date('2024-03-28 02:23:27'), new Date('2024-03-28 00:00:00'))).toBe(true); + expect(isSameDate(new Date('2024-03-28 02:23:27'))).toBe(false); + expect(isSameDate(new Date())).toBe(true); + }); + + test('isSameMonth with default', () => { + expect(isSameMonth(new Date('2024-03-28 02:23:27'))).toBe(false); + expect(isSameMonth(new Date())).toBe(true); + }); + + test('isSameYear with default', () => { + expect(isSameYear(new Date('2022-03-28 02:23:27'))).toBe(false); + expect(isSameYear(new Date())).toBe(true); + }); + + test('isToday', () => { + expect(isToday(new Date('2024-03-28 02:23:27'))).toBe(false); + expect(isToday(new Date())).toBe(true); + }); + + test('isYesteday', () => { + expect(isYesterday(new Date('2024-03-28 02:23:27'))).toBe(false); + const today = new Date(); + today.setDate(today.getDate() - 1); + expect(isYesterday(today)).toBe(true); + }); +}); diff --git a/app/utils/deep_link/index.test.ts b/app/utils/deep_link/index.test.ts new file mode 100644 index 00000000000..ec18e833e68 --- /dev/null +++ b/app/utils/deep_link/index.test.ts @@ -0,0 +1,286 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {createIntl} from 'react-intl'; +import {Navigation} from 'react-native-navigation'; + +import {makeDirectChannel, switchToChannelByName} from '@actions/remote/channel'; +import {showPermalink} from '@actions/remote/permalink'; +import {fetchUsersByUsernames} from '@actions/remote/user'; +import {DeepLink, Launch, Preferences, Screens} from '@constants'; +import DatabaseManager from '@database/manager'; +import {t} from '@i18n'; +import WebsocketManager from '@managers/websocket_manager'; +import {getActiveServerUrl} from '@queries/app/servers'; +import {queryUsersByUsername} from '@queries/servers/user'; +import {dismissAllModalsAndPopToRoot} from '@screens/navigation'; +import NavigationStore from '@store/navigation_store'; +import {logError} from '@utils/log'; +import {addNewServer} from '@utils/server'; + +import {alertErrorWithFallback, errorBadChannel, errorUnkownUser} from '../draft'; + +import {alertInvalidDeepLink, extractServerUrl, getLaunchPropsFromDeepLink, handleDeepLink} from '.'; + +jest.mock('@actions/remote/user', () => ({ + fetchUsersByUsernames: jest.fn(), +})); + +jest.mock('@actions/remote/permalink', () => ({ + showPermalink: jest.fn(), +})); + +jest.mock('@queries/app/servers', () => ({ + getActiveServerUrl: jest.fn(), +})); + +jest.mock('@queries/servers/user', () => ({ + getCurrentUser: jest.fn(), + queryUsersByUsername: jest.fn(() => ({fetchIds: jest.fn(() => ['user-id'])})), +})); + +jest.mock('@database/manager', () => ({ + searchUrl: jest.fn(), + setActiveServerDatabase: jest.fn(), + getServerDatabaseAndOperator: jest.fn(() => ({database: {}, operator: {}})), +})); + +jest.mock('@managers/websocket_manager', () => ({ + initializeClient: jest.fn(), +})); + +jest.mock('@store/navigation_store', () => ({ + getVisibleScreen: jest.fn(() => 'HOME'), + hasModalsOpened: jest.fn(() => false), + waitUntilScreenHasLoaded: jest.fn(), + getScreensInStack: jest.fn().mockReturnValue([]), +})); + +jest.mock('@utils/server', () => ({ + addNewServer: jest.fn(), +})); + +jest.mock('@actions/remote/channel', () => ({ + makeDirectChannel: jest.fn(), + switchToChannelByName: jest.fn(), +})); + +jest.mock('@utils/draft', () => ({ + errorBadChannel: jest.fn(), + errorUnkownUser: jest.fn(), + alertErrorWithFallback: jest.fn(), +})); + +jest.mock('@utils/log', () => ({ + logError: jest.fn(), +})); + +jest.mock('@i18n', () => ({ + DEFAULT_LOCALE: 'en', + getTranslations: jest.fn(() => ({})), + t: jest.fn((id) => id), +})); + +describe('extractServerUrl', () => { + it('should extract the sanitized server url', () => { + expect(extractServerUrl('example.com:8080//path/to///login')).toEqual('example.com:8080/path/to'); + expect(extractServerUrl('localhost:3000/signup')).toEqual('localhost:3000'); + expect(extractServerUrl('192.168.0.1/admin_console')).toEqual('192.168.0.1'); + expect(extractServerUrl('example.com/path//to/resource')).toEqual('example.com/path/to/resource'); + expect(extractServerUrl('my.local.network/.../resource/admin_console')).toEqual('my.local.network/resource'); + expect(extractServerUrl('my.local.network//ad-1/channels/%252f%252e.town-square')).toEqual(null); + expect(extractServerUrl('example.com:8080')).toEqual('example.com:8080'); + expect(extractServerUrl('example.com:8080/')).toEqual('example.com:8080'); + }); +}); + +describe('handleDeepLink', () => { + const intl = createIntl({locale: 'en', messages: {}}); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return error for invalid deep link', async () => { + const result = await handleDeepLink('invalid-url'); + expect(result).toEqual({error: true}); + }); + + it('should add new server if not existing', async () => { + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce('https://currentserver.com'); + (DatabaseManager.searchUrl as jest.Mock).mockReturnValueOnce(''); + const result = await handleDeepLink('https://newserver.com/team/channels/town-square'); + expect(addNewServer).toHaveBeenCalledWith(Preferences.THEMES.denim, 'newserver.com', undefined, {type: DeepLink.Channel, + data: { + serverUrl: 'newserver.com', + channelName: 'town-square', + teamName: 'team', + }, + url: 'https://newserver.com/team/channels/town-square', + }); + expect(result).toEqual({error: false}); + }); + + it('should handle existing server and switch to home screen', async () => { + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce('https://currentserver.com'); + (DatabaseManager.searchUrl as jest.Mock).mockReturnValueOnce('https://existingserver.com'); + const result = await handleDeepLink('https://existingserver.com/team/channels/town-square'); + expect(dismissAllModalsAndPopToRoot).toHaveBeenCalled(); + expect(DatabaseManager.setActiveServerDatabase).toHaveBeenCalledWith('https://existingserver.com'); + expect(WebsocketManager.initializeClient).toHaveBeenCalledWith('https://existingserver.com'); + expect(result).toEqual({error: false}); + }); + + it('should update the server url in the server url screen', async () => { + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce('https://currentserver.com'); + (DatabaseManager.searchUrl as jest.Mock).mockReturnValueOnce(null); + + (NavigationStore.getVisibleScreen as jest.Mock).mockReturnValueOnce(Screens.SERVER); + const result = await handleDeepLink('https://currentserver.com/team/channels/town-square', undefined, undefined, true); + const spyOnUpdateProps = jest.spyOn(Navigation, 'updateProps'); + expect(spyOnUpdateProps).toHaveBeenCalledWith(Screens.SERVER, {serverUrl: 'currentserver.com'}); + expect(result).toEqual({error: false}); + }); + + it('should not display the new server modal if the server screen is on the stack but not as the visible screen', async () => { + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce('https://currentserver.com'); + (DatabaseManager.searchUrl as jest.Mock).mockReturnValueOnce(null); + + (NavigationStore.getVisibleScreen as jest.Mock).mockReturnValueOnce(Screens.LOGIN); + (NavigationStore.getScreensInStack as jest.Mock).mockReturnValueOnce([Screens.SERVER, Screens.LOGIN]); + const result = await handleDeepLink('https://currentserver.com/team/channels/town-square', undefined, undefined, true); + expect(addNewServer).not.toHaveBeenCalled(); + expect(result).toEqual({error: false}); + }); + + it('should switch to channel by name for Channel deep link', async () => { + (DatabaseManager.searchUrl as jest.Mock).mockReturnValueOnce('https://existingserver.com'); + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce('https://existingserver.com'); + const result = await handleDeepLink('https://existingserver.com/team/channels/town-square', intl); + expect(switchToChannelByName).toHaveBeenCalledWith('https://existingserver.com', 'town-square', 'team', errorBadChannel, intl); + expect(result).toEqual({error: false}); + }); + + it('should create direct message for DirectMessage deep link', async () => { + (DatabaseManager.searchUrl as jest.Mock).mockReturnValueOnce('https://existingserver.com'); + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce('https://existingserver.com'); + (queryUsersByUsername as jest.Mock).mockReturnValueOnce({fetchIds: jest.fn(() => ['user-id'])}); + const result = await handleDeepLink('https://existingserver.com/team/messages/@user-id', intl); + expect(makeDirectChannel).toHaveBeenCalledWith('https://existingserver.com', 'user-id', '', true); + expect(result).toEqual({error: false}); + }); + + it('should fetch user and create direct message if user not found locally', async () => { + (DatabaseManager.searchUrl as jest.Mock).mockReturnValueOnce('https://existingserver.com'); + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce('https://existingserver.com'); + (queryUsersByUsername as jest.Mock).mockReturnValueOnce({fetchIds: jest.fn(() => [])}); + (fetchUsersByUsernames as jest.Mock).mockResolvedValueOnce({users: [{id: 'user-id'}]}); + const result = await handleDeepLink('https://existingserver.com/team/messages/@user-id', intl); + expect(makeDirectChannel).toHaveBeenCalledWith('https://existingserver.com', 'user-id', '', true); + expect(result).toEqual({error: false}); + }); + + it('should show unknown user error if user not found', async () => { + (DatabaseManager.searchUrl as jest.Mock).mockReturnValueOnce('https://existingserver.com'); + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce('https://existingserver.com'); + (queryUsersByUsername as jest.Mock).mockReturnValueOnce({fetchIds: jest.fn(() => [])}); + (fetchUsersByUsernames as jest.Mock).mockResolvedValueOnce({users: []}); + const result = await handleDeepLink('https://existingserver.com/team/messages/@user-id', intl); + expect(errorUnkownUser).toHaveBeenCalledWith(intl); + expect(result).toEqual({error: false}); + }); + + it('should switch to group message channel for GroupMessage deep link', async () => { + (DatabaseManager.searchUrl as jest.Mock).mockReturnValueOnce('https://existingserver.com'); + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce('https://existingserver.com'); + const result = await handleDeepLink('https://existingserver.com/team/messages/7b35c77a645e1906e03a2c330f89203385db102f', intl); + expect(switchToChannelByName).toHaveBeenCalledWith('https://existingserver.com', '7b35c77a645e1906e03a2c330f89203385db102f', 'team', errorBadChannel, intl); + expect(result).toEqual({error: false}); + }); + + it('should show permalink for Permalink deep link', async () => { + (DatabaseManager.searchUrl as jest.Mock).mockReturnValueOnce('https://existingserver.com'); + (getActiveServerUrl as jest.Mock).mockResolvedValueOnce('https://existingserver.com'); + const postid = '7b35c77a645e1906e03a2c330f'; + const result = await handleDeepLink(`https://existingserver.com/team/pl/${postid}`, intl); + expect(showPermalink).toHaveBeenCalledWith('https://existingserver.com', 'team', postid); + expect(result).toEqual({error: false}); + }); + + it('should log error and return error true on failure', async () => { + (getActiveServerUrl as jest.Mock).mockImplementationOnce(() => { + throw new Error('DB does not exist error'); + }); + const result = await handleDeepLink('https://existingserver.com/team/messages/7b35c77a645e1906e03a2c330f89203385db102f'); + expect(logError).toHaveBeenCalledWith('Failed to open channel from deeplink', expect.any(Error), undefined); + expect(result).toEqual({error: true}); + }); +}); + +describe('getLaunchPropsFromDeepLink', () => { + it('should return launch props with launchError when deep link is invalid', () => { + const result = getLaunchPropsFromDeepLink('invalid-url'); + + expect(result).toEqual({ + launchType: Launch.DeepLink, + coldStart: false, + launchError: true, + extra: { + type: DeepLink.Invalid, + url: 'invalid-url', + }, + }); + }); + + it('should return launch props with extra data when deep link is valid', () => { + const extraData = { + type: DeepLink.Channel, + data: { + channelName: 'town-square', + serverUrl: 'existingserver.com', + teamName: 'team', + }, + url: 'https://existingserver.com/team/channels/town-square', + }; + const result = getLaunchPropsFromDeepLink('https://existingserver.com/team/channels/town-square', true); + + expect(result).toEqual({ + launchType: Launch.DeepLink, + coldStart: true, + extra: extraData, + }); + }); + + it('should return launch props with extra data to add a new server when opened from cold start', () => { + const extraData = { + type: DeepLink.Server, + data: { + serverUrl: 'existingserver.com', + }, + url: 'https://existingserver.com/login', + }; + const result = getLaunchPropsFromDeepLink('https://existingserver.com/login', true); + + expect(result).toEqual({ + launchType: Launch.DeepLink, + coldStart: true, + extra: extraData, + }); + }); +}); + +describe('alertInvalidDeepLink', () => { + it('should call alertErrorWithFallback with correct arguments', () => { + const intl = createIntl({locale: 'en', messages: {}}); + const message = { + id: 'mobile.deep_link.invalid', + defaultMessage: 'This link you are trying to open is invalid.', + }; + + (t as jest.Mock).mockReturnValue(message.id); + + alertInvalidDeepLink(intl); + + expect(alertErrorWithFallback).toHaveBeenCalledWith(intl, {}, message); + }); +}); diff --git a/app/utils/deep_link/index.ts b/app/utils/deep_link/index.ts index 4422d7aa375..98d64722fc5 100644 --- a/app/utils/deep_link/index.ts +++ b/app/utils/deep_link/index.ts @@ -2,7 +2,8 @@ // See LICENSE.txt for license information. import {match} from 'path-to-regexp'; -import {createIntl, type IntlShape} from 'react-intl'; +import {type IntlShape} from 'react-intl'; +import {Navigation} from 'react-native-navigation'; import urlParse from 'url-parse'; import {makeDirectChannel, switchToChannelByName} from '@actions/remote/channel'; @@ -12,7 +13,7 @@ import DeepLinkType from '@app/constants/deep_linking'; import {DeepLink, Launch, Screens} from '@constants'; import {getDefaultThemeByAppearance} from '@context/theme'; import DatabaseManager from '@database/manager'; -import {DEFAULT_LOCALE, getTranslations, t} from '@i18n'; +import {DEFAULT_LOCALE, t} from '@i18n'; import WebsocketManager from '@managers/websocket_manager'; import {getActiveServerUrl} from '@queries/app/servers'; import {getCurrentUser, queryUsersByUsername} from '@queries/servers/user'; @@ -20,25 +21,25 @@ import {dismissAllModalsAndPopToRoot} from '@screens/navigation'; import EphemeralStore from '@store/ephemeral_store'; import NavigationStore from '@store/navigation_store'; import {alertErrorWithFallback, errorBadChannel, errorUnkownUser} from '@utils/draft'; +import {getIntlShape} from '@utils/general'; import {logError} from '@utils/log'; import {escapeRegex} from '@utils/markdown'; import {addNewServer} from '@utils/server'; +import {removeProtocol, stripTrailingSlashes} from '@utils/url'; import { TEAM_NAME_PATH_PATTERN, IDENTIFIER_PATH_PATTERN, ID_PATH_PATTERN, } from '@utils/url/path'; -import {removeProtocol} from '../url'; - import type {DeepLinkChannel, DeepLinkDM, DeepLinkGM, DeepLinkPermalink, DeepLinkWithData, LaunchProps} from '@typings/launch'; import type {AvailableScreens} from '@typings/screens/navigation'; const deepLinkScreens: AvailableScreens[] = [Screens.HOME, Screens.CHANNEL, Screens.GLOBAL_THREADS, Screens.THREAD]; -export async function handleDeepLink(deepLinkUrl: string, intlShape?: IntlShape, location?: string) { +export async function handleDeepLink(deepLinkUrl: string, intlShape?: IntlShape, location?: string, asServer = false) { try { - const parsed = parseDeepLink(deepLinkUrl); + const parsed = parseDeepLink(deepLinkUrl, asServer); if (parsed.type === DeepLink.Invalid || !parsed.data || !parsed.data.serverUrl) { return {error: true}; } @@ -49,7 +50,11 @@ export async function handleDeepLink(deepLinkUrl: string, intlShape?: IntlShape, // After checking the server for http & https then we add it if (!existingServerUrl) { const theme = EphemeralStore.theme || getDefaultThemeByAppearance(); - addNewServer(theme, parsed.data.serverUrl, undefined, parsed); + if (NavigationStore.getVisibleScreen() === Screens.SERVER) { + Navigation.updateProps(Screens.SERVER, {serverUrl: parsed.data.serverUrl}); + } else if (!NavigationStore.getScreensInStack().includes(Screens.SERVER)) { + addNewServer(theme, parsed.data.serverUrl, undefined, parsed); + } return {error: false}; } @@ -63,10 +68,7 @@ export async function handleDeepLink(deepLinkUrl: string, intlShape?: IntlShape, const {database} = DatabaseManager.getServerDatabaseAndOperator(existingServerUrl); const currentUser = await getCurrentUser(database); const locale = currentUser?.locale || DEFAULT_LOCALE; - const intl = intlShape || createIntl({ - locale, - messages: getTranslations(locale), - }); + const intl = intlShape || getIntlShape(locale); switch (parsed.type) { case DeepLink.Channel: { @@ -118,48 +120,127 @@ export async function handleDeepLink(deepLinkUrl: string, intlShape?: IntlShape, type ChannelPathParams = { hostname: string; - serverUrl: string; + serverUrl: string[]; teamName: string; path: 'channels' | 'messages'; identifier: string; }; -const CHANNEL_PATH = `:serverUrl(.*)/:teamName(${TEAM_NAME_PATH_PATTERN})/:path(channels|messages)/:identifier(${IDENTIFIER_PATH_PATTERN})`; +const CHANNEL_PATH = '*serverUrl/:teamName/:path/:identifier'; export const matchChannelDeeplink = match(CHANNEL_PATH); type PermalinkPathParams = { - serverUrl: string; + serverUrl: string[]; teamName: string; postId: string; }; -const PERMALINK_PATH = `:serverUrl(.*)/:teamName(${TEAM_NAME_PATH_PATTERN})/pl/:postId(${ID_PATH_PATTERN})`; +const PERMALINK_PATH = '*serverUrl/:teamName/pl/:postId'; export const matchPermalinkDeeplink = match(PERMALINK_PATH); -export function parseDeepLink(deepLinkUrl: string): DeepLinkWithData { +type ServerPathParams = { + serverUrl: string; + path: string; + subpath?: string[]; +} + +export const matchServerDeepLink = match(':serverUrl/{:path}{/*subpath}', {decode: decodeURIComponent}); +const reservedWords = ['login', 'signup', 'admin_console']; + +export function extractServerUrl(url: string) { + const deepLinkUrl = decodeURIComponent(url).replace(/\.{2,}/g, '').replace(/\/+/g, '/'); + + const pattern = new RegExp( + + // Match the domain, IP address, or localhost + '^([a-zA-Z0-9.-]+|localhost|\\d{1,3}(?:\\.\\d{1,3}){3})' + + + // Match optional port + '(?::(\\d+))?' + + + // Match path segments + '(?:/([a-zA-Z0-9-/_]+))?/?$', + ); + + if (!pattern.test(deepLinkUrl)) { + return null; + } + + const matched = matchServerDeepLink(deepLinkUrl); + + if (matched) { + const {path, subpath} = matched.params; + + let extra = ''; + + if (!path || reservedWords.includes(path)) { + return stripTrailingSlashes(matched.params.serverUrl); + } + + if (subpath && subpath.length > 0) { + if (reservedWords.includes(subpath[subpath.length - 1])) { + subpath.pop(); + } + + extra = subpath.join('/'); + } + + if (extra) { + return stripTrailingSlashes(`${matched.params.serverUrl}/${path}/${extra}`); + } + + return stripTrailingSlashes(`${matched.params.serverUrl}/${path}`); + } + + return deepLinkUrl; +} + +function isValidTeamName(teamName: string): boolean { + const regex = new RegExp(`^${TEAM_NAME_PATH_PATTERN}$`); + return regex.test(teamName); +} + +function isValidIdentifierPathPattern(id: string): boolean { + const regex = new RegExp(`^${IDENTIFIER_PATH_PATTERN}$`); + return regex.test(id); +} + +function isValidPostId(id: string): boolean { + const regex = new RegExp(`^${ID_PATH_PATTERN}$`); + return regex.test(id); +} + +export function parseDeepLink(deepLinkUrl: string, asServer = false): DeepLinkWithData { try { const url = removeProtocol(deepLinkUrl); const channelMatch = matchChannelDeeplink(url); - if (channelMatch) { + if (channelMatch && isValidTeamName(channelMatch.params.teamName) && isValidIdentifierPathPattern(channelMatch.params.identifier)) { const {params: {serverUrl, teamName, path, identifier}} = channelMatch; if (path === 'channels') { - return {type: DeepLink.Channel, url: deepLinkUrl, data: {serverUrl, teamName, channelName: identifier}}; + return {type: DeepLink.Channel, url: deepLinkUrl, data: {serverUrl: serverUrl.join('/'), teamName, channelName: identifier}}; } if (path === 'messages') { if (identifier.startsWith('@')) { - return {type: DeepLink.DirectMessage, url: deepLinkUrl, data: {serverUrl, teamName, userName: identifier.substring(1)}}; + return {type: DeepLink.DirectMessage, url: deepLinkUrl, data: {serverUrl: serverUrl.join('/'), teamName, userName: identifier.substring(1)}}; } - return {type: DeepLink.GroupMessage, url: deepLinkUrl, data: {serverUrl, teamName, channelName: identifier}}; + return {type: DeepLink.GroupMessage, url: deepLinkUrl, data: {serverUrl: serverUrl.join('/'), teamName, channelName: identifier}}; } } const permalinkMatch = matchPermalinkDeeplink(url); - if (permalinkMatch) { + if (permalinkMatch && isValidTeamName(permalinkMatch.params.teamName) && isValidPostId(permalinkMatch.params.postId)) { const {params: {serverUrl, teamName, postId}} = permalinkMatch; - return {type: DeepLink.Permalink, url: deepLinkUrl, data: {serverUrl, teamName, postId}}; + return {type: DeepLink.Permalink, url: deepLinkUrl, data: {serverUrl: serverUrl.join('/'), teamName, postId}}; + } + + if (asServer) { + const serverMatch = extractServerUrl(url); + if (serverMatch) { + return {type: DeepLink.Server, url: deepLinkUrl, data: {serverUrl: serverMatch}}; + } } } catch (err) { // do nothing just return invalid deeplink @@ -196,7 +277,7 @@ export function matchDeepLink(url: string, serverURL?: string, siteURL?: string) } export const getLaunchPropsFromDeepLink = (deepLinkUrl: string, coldStart = false): LaunchProps => { - const parsed = parseDeepLink(deepLinkUrl); + const parsed = parseDeepLink(deepLinkUrl, coldStart); const launchProps: LaunchProps = { launchType: Launch.DeepLink, coldStart, @@ -205,6 +286,7 @@ export const getLaunchPropsFromDeepLink = (deepLinkUrl: string, coldStart = fals switch (parsed.type) { case DeepLink.Invalid: launchProps.launchError = true; + launchProps.extra = parsed; break; default: { launchProps.extra = parsed; diff --git a/app/utils/document/index.test.ts b/app/utils/document/index.test.ts new file mode 100644 index 00000000000..6a280be7112 --- /dev/null +++ b/app/utils/document/index.test.ts @@ -0,0 +1,77 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Alert} from 'react-native'; + +import {alertFailedToOpenDocument, alertDownloadDocumentDisabled, alertDownloadFailed} from './'; + +import type {IntlShape} from 'react-intl'; + +jest.mock('react-native', () => ({ + Alert: { + alert: jest.fn(), + }, +})); + +describe('alertUtils', () => { + const intlMock = { + formatMessage: jest.fn(), + } as unknown as IntlShape; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should alert failed to open document with correct messages', () => { + const file = {extension: 'pdf'} as FileInfo; + + intlMock.formatMessage. + + //@ts-expect-error type definition + mockReturnValueOnce('Open Document failed'). + mockReturnValueOnce('An error occurred while opening the document. Please make sure you have a PDF viewer installed and try again.\n'). + mockReturnValueOnce('OK'); + + alertFailedToOpenDocument(file, intlMock); + + expect(Alert.alert).toHaveBeenCalledWith( + 'Open Document failed', + 'An error occurred while opening the document. Please make sure you have a PDF viewer installed and try again.\n', + [{text: 'OK'}], + ); + }); + + it('should alert download document disabled with correct messages', () => { + intlMock.formatMessage. + + //@ts-expect-error type definition + mockReturnValueOnce('Download disabled'). + mockReturnValueOnce('File downloads are disabled on this server. Please contact your System Admin for more details.\n'). + mockReturnValueOnce('OK'); + + alertDownloadDocumentDisabled(intlMock); + + expect(Alert.alert).toHaveBeenCalledWith( + 'Download disabled', + 'File downloads are disabled on this server. Please contact your System Admin for more details.\n', + [{text: 'OK'}], + ); + }); + + it('should alert download failed with correct messages', () => { + intlMock.formatMessage. + + //@ts-expect-error type definition + mockReturnValueOnce('Download failed'). + mockReturnValueOnce('An error occurred while downloading the file. Please check your internet connection and try again.\n'). + mockReturnValueOnce('OK'); + + alertDownloadFailed(intlMock); + + expect(Alert.alert).toHaveBeenCalledWith( + 'Download failed', + 'An error occurred while downloading the file. Please check your internet connection and try again.\n', + [{text: 'OK'}], + ); + }); +}); diff --git a/app/utils/draft/index.test.ts b/app/utils/draft/index.test.ts new file mode 100644 index 00000000000..d6b6cd2a5cc --- /dev/null +++ b/app/utils/draft/index.test.ts @@ -0,0 +1,194 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {createIntl} from 'react-intl'; +import {Alert} from 'react-native'; + +import {General} from '@constants'; + +import { + errorBadChannel, + errorUnkownUser, + permalinkBadTeam, + alertErrorWithFallback, + alertAttachmentFail, + textContainsAtAllAtChannel, + textContainsAtHere, + buildChannelWideMentionMessage, + alertChannelWideMention, + alertSendToGroups, + getStatusFromSlashCommand, + alertSlashCommandFailed, +} from './'; + +jest.mock('react-native', () => { + const RN = jest.requireActual('react-native'); + return { + Platform: RN.Platform, + NativeModules: { + ...RN.NativeModules, + RNUtils: { + getConstants: () => ({ + appGroupIdentifier: 'group.mattermost.rnbeta', + appGroupSharedDirectory: { + sharedDirectory: '', + databasePath: '', + }, + }), + addListener: jest.fn(), + removeListeners: jest.fn(), + isRunningInSplitView: jest.fn().mockReturnValue({isSplit: false, isTablet: false}), + getDeliveredNotifications: jest.fn().mockResolvedValue([]), + removeChannelNotifications: jest.fn().mockImplementation(), + removeThreadNotifications: jest.fn().mockImplementation(), + removeServerNotifications: jest.fn().mockImplementation(), + }, + }, + Alert: { + alert: jest.fn(), + }, + }; +}); + +jest.mock('@i18n', () => ({ + t: (id: string) => id, +})); + +describe('draft utils', () => { + const intl = createIntl({locale: 'en', messages: {}}); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should alert error bad channel', () => { + errorBadChannel(intl); + expect(Alert.alert).toHaveBeenCalledWith('', 'This link belongs to a deleted channel or to a channel to which you do not have access.', undefined); + }); + + it('should alert error unknown user', () => { + errorUnkownUser(intl); + expect(Alert.alert).toHaveBeenCalledWith('', 'We can\'t redirect you to the DM. The user specified is unknown.', undefined); + }); + + it('should alert permalink bad team', () => { + permalinkBadTeam(intl); + expect(Alert.alert).toHaveBeenCalledWith('', 'This link belongs to a deleted team or to a team to which you do not have access.', undefined); + }); + + it('should alert error with fallback', () => { + const error = {message: 'Test Error'}; + const fallback = {id: 'fallback.id', defaultMessage: 'Fallback Message'}; + alertErrorWithFallback(intl, error, fallback); + expect(Alert.alert).toHaveBeenCalledWith('', 'Test Error', undefined); + }); + + it('should alert error with fallback when network request failed', () => { + const error = {message: 'Network request failed'}; + const fallback = {id: 'fallback.id', defaultMessage: 'Fallback Message'}; + + alertErrorWithFallback(intl, error, fallback); + expect(Alert.alert).toHaveBeenCalledWith('', 'Fallback Message', undefined); + }); + + it('should alert attachment fail', () => { + const accept = jest.fn(); + const cancel = jest.fn(); + + alertAttachmentFail(intl, accept, cancel); + expect(Alert.alert).toHaveBeenCalledWith( + 'Attachment failure', + 'Some attachments failed to upload to the server. Are you sure you want to post the message?', + [ + {text: 'No', onPress: cancel}, + {text: 'Yes', onPress: accept}, + ], + ); + }); + + it('should detect @all and @channel in text', () => { + const text = 'Hello @all'; + expect(textContainsAtAllAtChannel(text)).toBe(true); + }); + + it('should detect @here in text', () => { + const text = 'Hello @here'; + expect(textContainsAtHere(text)).toBe(true); + }); + + it('should build channel-wide mention message with timezones', () => { + const membersCount = 10; + const channelTimezoneCount = 3; + + let message = buildChannelWideMentionMessage(intl, membersCount, channelTimezoneCount, true); + expect(message).toBe('By using @here you are about to send notifications up to 9 people in 3 timezones. Are you sure you want to do this?'); + + message = buildChannelWideMentionMessage(intl, membersCount, channelTimezoneCount, false); + expect(message).toBe('By using @all or @channel you are about to send notifications to 9 people in 3 timezones. Are you sure you want to do this?'); + }); + + it('should build channel-wide mention message without timezones', () => { + const membersCount = 10; + const channelTimezoneCount = 0; + + let message = buildChannelWideMentionMessage(intl, membersCount, channelTimezoneCount, true); + expect(message).toBe('By using @here you are about to send notifications to up to 9 people. Are you sure you want to do this?'); + + message = buildChannelWideMentionMessage(intl, membersCount, channelTimezoneCount, false); + expect(message).toBe('By using @all or @channel you are about to send notifications to 9 people. Are you sure you want to do this?'); + }); + + it('should alert channel-wide mention', () => { + const notifyAllMessage = 'Notify all message'; + const accept = jest.fn(); + const cancel = jest.fn(); + + alertChannelWideMention(intl, notifyAllMessage, accept, cancel); + expect(Alert.alert).toHaveBeenCalledWith( + 'Confirm sending notifications to entire channel', + 'Notify all message', + [ + {text: 'Cancel', onPress: cancel}, + {text: 'Confirm', onPress: accept}, + ], + ); + }); + + it('should alert send to groups', () => { + const notifyAllMessage = 'Notify all message'; + const accept = jest.fn(); + const cancel = jest.fn(); + + alertSendToGroups(intl, notifyAllMessage, accept, cancel); + expect(Alert.alert).toHaveBeenCalledWith( + 'Confirm sending notifications to groups', + 'Notify all message', + [ + {text: 'Cancel', onPress: cancel}, + {text: 'Confirm', onPress: accept}, + ], + ); + }); + + it('should get status from slash command', () => { + General.STATUS_COMMANDS = ['status']; + const message = '/status'; + expect(getStatusFromSlashCommand(message)).toBe('status'); + }); + + it('should not get status from non-status slash command', () => { + General.STATUS_COMMANDS = ['status']; + const message = '/nonstatus'; + expect(getStatusFromSlashCommand(message)).toBe(''); + }); + + it('should alert slash command failed', () => { + const error = 'Error message'; + + alertSlashCommandFailed(intl, error); + expect(Alert.alert).toHaveBeenCalledWith( + 'Error Executing Command', + 'Error message', + ); + }); +}); diff --git a/app/utils/emoji/helpers.test.ts b/app/utils/emoji/helpers.test.ts new file mode 100644 index 00000000000..5a397f993c7 --- /dev/null +++ b/app/utils/emoji/helpers.test.ts @@ -0,0 +1,259 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import Fuse from 'fuse.js'; + +import { + isEmoticon, + isUnicodeEmoji, + getEmoticonName, + matchEmoticons, + getValidEmojis, + getEmojiName, + isReactionMatch, + isValidNamedEmoji, + hasJumboEmojiOnly, + doesMatchNamedEmoji, + getEmojiFirstAlias, + getEmojiByName, + mapCustomEmojiNames, + compareEmojis, + isCustomEmojiEnabled, + fillEmoji, + getSkin, + getEmojis, + searchEmojis, +} from './helpers'; + +import type CustomEmojiModel from '@typings/database/models/servers/custom_emoji'; +import type SystemModel from '@typings/database/models/servers/system'; + +jest.mock('@database/models/server/system'); + +describe('helpers.ts tests', () => { + describe('isEmoticon', () => { + it('should return true for valid emoticons', () => { + expect(isEmoticon(':)')).toBe(true); + expect(isEmoticon(';)')).toBe(true); + }); + + it('should return false for invalid emoticons', () => { + expect(isEmoticon(':-*')).toBe(false); + expect(isEmoticon('hello')).toBe(false); + }); + }); + + describe('isUnicodeEmoji', () => { + it('should return true for unicode emoji', () => { + expect(isUnicodeEmoji('😊')).toBe(true); + }); + + it('should return false for non-emoji text', () => { + expect(isUnicodeEmoji('hello')).toBe(false); + }); + }); + + describe('getEmoticonName', () => { + it('should return correct emoticon name', () => { + expect(getEmoticonName(':)')).toBe('slightly_smiling_face'); + }); + + it('should return undefined for invalid emoticon', () => { + expect(getEmoticonName('hello')).toBeUndefined(); + }); + }); + + describe('matchEmoticons', () => { + it('should match named, unicode, and emoticon emojis', () => { + const text = 'Hello :) :smile: 😊'; + const result = matchEmoticons(text); + expect(result).toEqual([':smile:', ' :)', '😊']); + }); + + it('should return empty array for no matches', () => { + expect(matchEmoticons('hello')).toEqual([]); + }); + }); + + describe('getValidEmojis', () => { + it('should return valid emoji names', () => { + const emojis = [':smile:', '😊', ':)']; + const customEmojis = [{name: 'custom_emoji'}] as CustomEmojiModel[]; + const result = getValidEmojis(emojis, customEmojis); + expect(result).toContain('smile'); + }); + + it('should return empty array for no valid emojis', () => { + const emojis = ['hello']; + const customEmojis = [{name: 'custom_emoji'}] as CustomEmojiModel[]; + const result = getValidEmojis(emojis, customEmojis); + expect(result).toEqual([]); + }); + }); + + describe('getEmojiName', () => { + it('should return correct emoji name for named emoji', () => { + expect(getEmojiName(':smile:', [])).toBe('smile'); + }); + + it('should return correct emoji name for unicode emoji', () => { + expect(getEmojiName('😊', [])).toBe('blush'); + }); + + it('should return correct emoji name for emoticon', () => { + expect(getEmojiName(':)', [])).toBe('slightly_smiling_face'); + }); + + it('should return undefined for invalid emoji', () => { + expect(getEmojiName('hello', [])).toBeUndefined(); + }); + }); + + describe('isReactionMatch', () => { + it('should return correct reaction match for valid reaction', () => { + const custom = [{name: 'custom'}] as CustomEmojiModel[]; + expect(isReactionMatch('+:smile:', custom)).toEqual({add: true, emoji: 'smile'}); + expect(isReactionMatch('+:custom:', custom)).toEqual({add: true, emoji: 'custom'}); + expect(isReactionMatch('+:lala:', custom)).toEqual(null); + }); + + it('should return null for invalid reaction', () => { + expect(isReactionMatch(':hello:', [])).toBeNull(); + }); + }); + + describe('isValidNamedEmoji', () => { + it('should return true for valid named emoji', () => { + expect(isValidNamedEmoji('smile', [])).toBe(true); + }); + + it('should return false for invalid named emoji', () => { + expect(isValidNamedEmoji('hello', [])).toBe(false); + }); + }); + + describe('hasJumboEmojiOnly', () => { + it('should return true for jumbo emojis only', () => { + expect(hasJumboEmojiOnly('😊', [])).toBe(true); + expect(hasJumboEmojiOnly('😊 😊', [])).toBe(true); + }); + + it('should return false for non-jumbo emojis', () => { + expect(hasJumboEmojiOnly('hello', [])).toBe(false); + }); + + it('should return false for strings with spaces only', () => { + expect(hasJumboEmojiOnly(' ', [])).toBe(false); + }); + + it('should return true for strings with custom emojis', () => { + const custom = ['custom']; + expect(hasJumboEmojiOnly('😊 :custom: :blush:', custom)).toBe(true); + }); + + it('should return false for strings with more than 8 emojis', () => { + expect(hasJumboEmojiOnly('😊 😊 😊 😊 😊 😊 😊 😊 😊', [])).toBe(false); + }); + }); + + describe('doesMatchNamedEmoji', () => { + it('should return true for valid named emoji', () => { + expect(doesMatchNamedEmoji(':smile:')).toBe(true); + }); + + it('should return false for invalid named emoji', () => { + expect(doesMatchNamedEmoji('hello')).toBe(false); + }); + }); + + describe('getEmojiFirstAlias', () => { + it('should return first alias of emoji', () => { + expect(getEmojiFirstAlias('smile')).toBe('smile'); + expect(getEmojiFirstAlias('lolo')).toBe('lolo'); + }); + }); + + describe('getEmojiByName', () => { + it('should return emoji by name for standard emoji', () => { + expect(getEmojiByName('smile', [])).toEqual(expect.objectContaining({short_names: ['smile'], category: 'smileys-emotion'})); + }); + + it('should return emoji by name for custom emoji', () => { + const customEmojis = [{name: 'custom_emoji'}] as CustomEmojiModel[]; + expect(getEmojiByName('custom_emoji', customEmojis)).toEqual({name: 'custom_emoji'}); + }); + + it('should return undefined for invalid emoji', () => { + expect(getEmojiByName('hello', [])).toBeUndefined(); + }); + }); + + describe('mapCustomEmojiNames', () => { + it('should return names of custom emojis', () => { + const customEmojis = [{name: 'custom_emoji'}] as CustomEmojiModel[]; + expect(mapCustomEmojiNames(customEmojis)).toEqual(['custom_emoji']); + }); + }); + + describe('compareEmojis', () => { + it('should compare emojis correctly based on search term', () => { + expect(compareEmojis('smile', 'grin', 'smi')).toBe(-1); + expect(compareEmojis('grin', 'smile', 'smi')).toBe(1); + expect(compareEmojis('smile', 'grin', '')).toBe(1); + expect(compareEmojis('smile', 'smile', 'smi')).toBe(0); + }); + }); + + describe('isCustomEmojiEnabled', () => { + it('should return true if custom emoji is enabled in config', () => { + expect(isCustomEmojiEnabled({EnableCustomEmoji: 'true'} as any)).toBe(true); + + expect(isCustomEmojiEnabled({value: {EnableCustomEmoji: 'true'}} as SystemModel)).toBe(true); + }); + + it('should return false if custom emoji is disabled in config', () => { + expect(isCustomEmojiEnabled({EnableCustomEmoji: 'false'} as any)).toBe(false); + }); + }); + + describe('fillEmoji', () => { + it('should fill emoji correctly', () => { + expect(fillEmoji('category', 1)).toEqual({name: 'smiley', aliases: ['smiley'], category: 'category'}); + }); + }); + + describe('getSkin', () => { + it('should return default for skin variations', () => { + const emoji = {skin_variations: []}; + expect(getSkin(emoji)).toBe('default'); + }); + + it('should return first skin for skins array', () => { + const emoji = {skins: ['light']}; + expect(getSkin(emoji)).toBe('light'); + }); + + it('should return null for no skin variations', () => { + const emoji = {}; + expect(getSkin(emoji)).toBeNull(); + }); + }); + + describe('getEmojis', () => { + it('should return emojis for specified skin tone', () => { + const custom = [{name: 'hey_custom'}] as CustomEmojiModel[]; + expect(getEmojis('dark', custom)).toEqual(expect.arrayContaining(['grinning', 'smiley', 'smile', 'grin', 'laughing', 'satisfied', 'sweat_smile', 'rolling_on_the_floor_laughing', 'rofl', 'joy', 'hey_custom'])); + }); + }); + + describe('searchEmojis', () => { + it('should return emojis matching search term', () => { + const options = {findAllMatches: true, ignoreLocation: true, includeMatches: true, shouldSort: false, includeScore: true}; + const emojis = getEmojis('light', []); + const fuse = new Fuse(emojis, options); + const result = searchEmojis(fuse, 'smile'); + expect(result).toEqual(['smile', 'smile_cat', 'smiley', 'smiley_cat', 'sweat_smile']); + expect(searchEmojis(fuse, 'cawabunga')).toEqual([]); + }); + }); +}); diff --git a/app/utils/emoji/helpers.ts b/app/utils/emoji/helpers.ts index 8383b4cad34..1d8c22eb34e 100644 --- a/app/utils/emoji/helpers.ts +++ b/app/utils/emoji/helpers.ts @@ -42,7 +42,7 @@ const RE_REACTION = /^(\+|-):([^:\s]+):\s*$/; const MAX_JUMBO_EMOJIS = 8; -function isEmoticon(text: string) { +export function isEmoticon(text: string) { for (const emoticon of Object.keys(RE_EMOTICON)) { const reEmoticon = RE_EMOTICON[emoticon]; const matchEmoticon = text.match(reEmoticon); @@ -106,9 +106,17 @@ export function getEmojiName(emoji: string, customEmojiNames: string[]) { const matchUnicodeEmoji = emoji.match(RE_UNICODE_EMOJI); if (matchUnicodeEmoji) { - const index = EmojiIndicesByUnicode.get(matchUnicodeEmoji[0]); - if (index != null) { - return fillEmoji('', Emojis[index]).name; + function getEmojiHexValue(code: string) { + let hexValue = ''; + for (const char of code) { + hexValue += char.codePointAt(0)?.toString(16).toLowerCase() + ' '; + } + return hexValue.trim(); + } + const hex = getEmojiHexValue(matchUnicodeEmoji[0]); + const index = EmojiIndicesByUnicode.get(hex); + if (index != null && Emojis[index]) { + return fillEmoji('', index).name; } return undefined; } @@ -303,11 +311,11 @@ export function compareEmojis(emojiA: string | Partial, emojiB: strin } export const isCustomEmojiEnabled = (config: ClientConfig | SystemModel) => { - if (config instanceof SystemModel) { - return config?.value?.EnableCustomEmoji === 'true'; + if ('value' in config) { + return config.value?.EnableCustomEmoji === 'true'; } - return config?.EnableCustomEmoji === 'true'; + return config.EnableCustomEmoji === 'true'; }; export function fillEmoji(category: string, index: number) { diff --git a/app/utils/error_handling.test.ts b/app/utils/error_handling.test.ts new file mode 100644 index 00000000000..b898d1f55e9 --- /dev/null +++ b/app/utils/error_handling.test.ts @@ -0,0 +1,69 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Alert} from 'react-native'; +import Exception from 'react-native-exception-handler'; + +import {dismissAllModals, dismissAllOverlays} from '@screens/navigation'; +import testHelper from '@test/test_helper'; +import * as Sentry from '@utils/sentry'; + +import errorHandling from './error_handling'; +import * as Log from './log'; + +jest.mock('react-native-exception-handler', () => ({ + setJSExceptionHandler: jest.fn((callback: () => void, allowInDevMode: boolean) => { + if (!allowInDevMode) { + callback(); + } + }), +})); + +jest.mock('@utils/log', () => ({ + logWarning: jest.fn(() => ''), +})); + +describe('JavascriptAndNativeErrorHandler', () => { + const warning = jest.spyOn(Log, 'logWarning'); + const error = 'some error'; + + test('Initialization', () => { + const setJSExceptionHandler = jest.spyOn(Exception, 'setJSExceptionHandler'); + const initializeSentry = jest.spyOn(Sentry, 'initializeSentry'); + errorHandling.initializeErrorHandling(); + expect(setJSExceptionHandler).toHaveBeenCalledTimes(1); + expect(initializeSentry).toHaveBeenCalledTimes(1); + expect(setJSExceptionHandler).toHaveBeenCalledWith(errorHandling.errorHandler, false); + }); + + test('nativeErrorHander', () => { + const captureException = jest.spyOn(Sentry, 'captureException'); + errorHandling.nativeErrorHandler(error); + expect(warning).toHaveBeenCalledTimes(1); + expect(warning).toHaveBeenCalledWith(`Handling native error ${error}`); + expect(captureException).toHaveBeenCalledTimes(1); + expect(captureException).toHaveBeenCalledWith(error); + }); + + test('errorHandler', async () => { + const captureJSException = jest.spyOn(Sentry, 'captureJSException'); + + errorHandling.errorHandler(null, false); + expect(warning).toHaveBeenCalledTimes(0); + + errorHandling.errorHandler(error, true); + expect(warning).toHaveBeenCalledTimes(1); + expect(warning).toHaveBeenCalledWith('Handling Javascript error', error, true); + expect(captureJSException).toHaveBeenCalledTimes(1); + expect(captureJSException).toHaveBeenCalledWith(error, true); + + const throwError = new Error(error); + const alert = jest.spyOn(Alert, 'alert'); + errorHandling.errorHandler(throwError, true); + expect(alert?.mock?.calls?.[0]?.length).toBe(4); + alert?.mock.calls?.[0]?.[2]?.[0]?.onPress?.(); + expect(dismissAllModals).toHaveBeenCalledTimes(1); + await testHelper.wait(20); + expect(dismissAllOverlays).toHaveBeenCalledTimes(1); + }); +}); diff --git a/app/utils/errors.test.ts b/app/utils/errors.test.ts new file mode 100644 index 00000000000..5ca5b8675d2 --- /dev/null +++ b/app/utils/errors.test.ts @@ -0,0 +1,72 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import { + isServerError, + isErrorWithMessage, + isErrorWithDetails, + isErrorWithIntl, + isErrorWithStatusCode, + isErrorWithUrl, + getFullErrorMessage, +} from './errors'; +import {getIntlShape} from './general'; + +describe('Errors', () => { + test('isServerError', () => { + expect(isServerError('error')).toBe(false); + expect(isServerError({message: 'some error'})).toBe(false); + expect(isServerError({server_error_id: 'error_id'})).toBe(true); + }); + + test('isErrorWithMessage', () => { + expect(isErrorWithMessage('error')).toBe(false); + expect(isErrorWithMessage({message: 'some error'})).toBe(true); + expect(isErrorWithMessage({server_error_id: 'error_id'})).toBe(false); + }); + + test('isErrorWithDetails', () => { + expect(isErrorWithDetails('error')).toBe(false); + expect(isErrorWithDetails({message: 'some error'})).toBe(false); + expect(isErrorWithDetails({details: 'more info'})).toBe(true); + }); + + test('isErrorWithIntl', () => { + expect(isErrorWithIntl('error')).toBe(false); + expect(isErrorWithIntl({message: 'some error'})).toBe(false); + expect(isErrorWithIntl({intl: {id: 'some_error_id', defaultMessage: 'message text'}})).toBe(true); + }); + + test('isErrorWithStatusCode', () => { + expect(isErrorWithStatusCode('error')).toBe(false); + expect(isErrorWithStatusCode({message: 'some error'})).toBe(false); + expect(isErrorWithStatusCode({status_code: 95})).toBe(true); + }); + + test('isErrorWithUrl', () => { + expect(isErrorWithUrl('error')).toBe(false); + expect(isErrorWithUrl({message: 'some error'})).toBe(false); + expect(isErrorWithUrl({url: 'http://localhost:8065'})).toBe(true); + }); + + test('getFullErrorMessage', () => { + const intl = getIntlShape(); + expect(getFullErrorMessage('error', intl)).toBe('error'); + expect(getFullErrorMessage({details: 'more info', message: 'error message'}, intl)).toBe('error message; more info'); + expect(getFullErrorMessage({details: 'more info', message: 'error message'}, intl, 3)).toBe('error message; error message'); + expect(getFullErrorMessage({ + details: 'more info', + message: 'error message', + intl: {id: 'some_error_id', defaultMessage: 'message text'}, + }, intl)).toBe('message text; more info'); + expect(getFullErrorMessage({ + details: 'more info', + message: 'error message', + intl: {id: 'some_error_id', defaultMessage: 'default message text'}, + })).toBe('default message text; more info'); + + expect(getFullErrorMessage({ + details: 'more info', + })).toBe('Unknown error; more info'); + }); +}); diff --git a/app/utils/errors.ts b/app/utils/errors.ts index f0f013541ed..4d96d371e0e 100644 --- a/app/utils/errors.ts +++ b/app/utils/errors.ts @@ -8,9 +8,8 @@ export function isServerError(obj: unknown): obj is {server_error_id?: string} { typeof obj === 'object' && obj !== null && ( - !('server_error_id' in obj) || - typeof obj.server_error_id === 'string' || - typeof obj.server_error_id === 'undefined' + ('server_error_id' in obj) && + typeof obj.server_error_id === 'string' ) ); } @@ -56,11 +55,8 @@ export function isErrorWithUrl(obj: unknown): obj is {url?: string} { return ( typeof obj === 'object' && obj !== null && - ( - !('url' in obj) || - typeof obj.url === 'string' || - typeof obj.url === 'undefined' - ) + ('url' in obj) && + typeof obj.url === 'string' ); } diff --git a/app/utils/file/file_picker/index.test.ts b/app/utils/file/file_picker/index.test.ts new file mode 100644 index 00000000000..9887f7447b9 --- /dev/null +++ b/app/utils/file/file_picker/index.test.ts @@ -0,0 +1,711 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +/* eslint-disable max-lines */ + +import RNUtils from '@mattermost/rnutils'; +import {applicationName} from 'expo-application'; +import {Alert, Platform} from 'react-native'; +import DocumentPicker, {type DocumentPickerResponse} from 'react-native-document-picker'; +import {launchCamera, launchImageLibrary, type Asset, type ImagePickerResponse} from 'react-native-image-picker'; +import Permissions from 'react-native-permissions'; + +import {dismissBottomSheet} from '@screens/navigation'; +import TestHelper from '@test/test_helper'; +import {extractFileInfo, lookupMimeType} from '@utils/file'; +import {getIntlShape} from '@utils/general'; +import {logWarning} from '@utils/log'; + +import FilePickerUtil from '.'; + +jest.mock('expo-file-system'); +jest.mock('react-native-image-picker'); + +jest.mock('react-native-document-picker', () => ({ + pick: jest.fn(async () => []), +})); + +jest.mock('@screens/navigation', () => ({ + dismissBottomSheet: jest.fn(), +})); + +jest.mock('@utils/file', () => ({ + extractFileInfo: jest.fn(), + lookupMimeType: jest.fn(), +})); + +jest.mock('@utils/log', () => ({ + logWarning: jest.fn(), +})); + +jest.mock('@mattermost/rnutils', () => ({ + getRealFilePath: jest.fn(), + isRunningInSplitView: jest.fn().mockReturnValue({isSplit: false, isTablet: false}), +})); + +describe('FilePickerUtil', () => { + const mockUploadFiles = jest.fn(); + const intl = getIntlShape(); + const originalSelect = Platform.select; + + let filePickerUtil: FilePickerUtil; + + beforeAll(() => { + Platform.select = ({android, ios, default: dft}: any) => { + if (Platform.OS === 'android' && android) { + return android; + } else if (Platform.OS === 'ios' && ios) { + return ios; + } + + return dft; + }; + }); + + afterAll(() => { + Platform.select = originalSelect; + }); + + beforeEach(() => { + Platform.OS = 'ios'; + filePickerUtil = new FilePickerUtil(intl, mockUploadFiles); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('private functions', () => { + test('should assign intl and uploadFiles correctly in the constructor', () => { + // @ts-expect-error intl is private + expect(filePickerUtil.intl).toBe(intl); + + // @ts-expect-error uploadFiles is private + expect(filePickerUtil.uploadFiles).toBe(mockUploadFiles); + }); + + test('should return correct permission messages for camera', () => { + const camera = { + title: `${applicationName} would like to access your camera`, + text: `Take photos and upload them to your server or save them to your device. Open Settings to grant ${applicationName} read and write access to your camera.`, + }; + + // @ts-expect-error getPermissionMessages is private + const result = filePickerUtil.getPermissionMessages('camera'); + expect(result).toEqual(camera); + }); + + test('should return correct permission messages for storage', () => { + const expected = { + title: `${applicationName} would like to access your files`, + text: `Upload files to your server. Open Settings to grant ${applicationName} Read and Write access to files on this device.`, + }; + + // @ts-expect-error getPermissionMessages is private + const result = filePickerUtil.getPermissionMessages('storage'); + expect(result).toEqual(expected); + }); + + test('should return correct permission messages for photo_ios', () => { + const expected = { + title: `${applicationName} would like to access your photos`, + text: `Upload photos and videos to your server or save them to your device. Open Settings to grant ${applicationName} Read and Write access to your photo and video library.`, + }; + + // @ts-expect-error getPermissionMessages is private + const result = filePickerUtil.getPermissionMessages('photo_ios'); + expect(result).toEqual(expected); + }); + + test('should return correct permission messages for photo_android', () => { + const expected = { + title: `${applicationName} would like to access your photos`, + text: `Upload photos to your server or save them to your device. Open Settings to grant ${applicationName} Read and Write access to your photo library.`, + }; + + // @ts-expect-error getPermissionMessages is private + const result = filePickerUtil.getPermissionMessages('photo_android'); + expect(result).toEqual(expected); + }); + + test('should prepare file upload correctly', async () => { + const mockFiles = [{uri: 'file://test'}] as Array; + const mockExtractedFiles = [{uri: 'file://test', name: 'test'}]; + + (extractFileInfo as jest.Mock).mockResolvedValue(mockExtractedFiles); + + // @ts-expect-error prepareFileUpload is private + await filePickerUtil.prepareFileUpload(mockFiles); + + expect(extractFileInfo).toHaveBeenCalledWith(mockFiles); + expect(dismissBottomSheet).toHaveBeenCalled(); + expect(mockUploadFiles).toHaveBeenCalledWith(mockExtractedFiles); + }); + + test('should not upload files if extraction returns an empty array', async () => { + const mockFiles = [{uri: 'file://test'}] as Array; + + (extractFileInfo as jest.Mock).mockResolvedValue([]); + + // @ts-expect-error prepareFileUpload is private + await filePickerUtil.prepareFileUpload(mockFiles); + + expect(extractFileInfo).toHaveBeenCalledWith(mockFiles); + expect(dismissBottomSheet).not.toHaveBeenCalled(); + expect(mockUploadFiles).not.toHaveBeenCalled(); + }); + + test('should return correct permission denied message with source', () => { + const expected = { + title: `${applicationName} would like to access your files`, + text: `Upload files to your server. Open Settings to grant ${applicationName} Read and Write access to files on this device.`, + }; + + // @ts-expect-error getPermissionDeniedMessage is private + const result = filePickerUtil.getPermissionDeniedMessage('storage'); + expect(result).toEqual(expected); + }); + + test('should return correct permission denied message without source', () => { + Platform.OS = 'android'; + const expected = { + title: `${applicationName} would like to access your photos`, + text: `Upload photos to your server or save them to your device. Open Settings to grant ${applicationName} Read and Write access to your photo library.`, + }; + + // @ts-expect-error getPermissionDeniedMessage is private + const result = filePickerUtil.getPermissionDeniedMessage(); + expect(result).toEqual(expected); + }); + + test('should return files from response correctly on iOS', async () => { + const mockResponse = { + assets: [{uri: 'file://test', type: 'image/jpeg'}], + } as ImagePickerResponse; + + // @ts-expect-error getFilesFromResponse is private + const result = await filePickerUtil.getFilesFromResponse(mockResponse); + + expect(result).toEqual(mockResponse.assets); + expect(logWarning).not.toHaveBeenCalled(); + }); + + test('should return files from response correctly on Android', async () => { + Platform.OS = 'android'; + const mockResponse = { + assets: [{uri: 'file://test', type: 'image/jpeg', fileName: 'test.jpg'}], + } as ImagePickerResponse; + + (RNUtils.getRealFilePath as jest.Mock).mockResolvedValue('file://real_path'); + (lookupMimeType as jest.Mock).mockReturnValue('image/jpeg'); + + // @ts-expect-error getFilesFromResponse is private + const result = await filePickerUtil.getFilesFromResponse(mockResponse); + + expect(result).toEqual([{...mockResponse.assets![0], uri: 'file://real_path'}]); + expect(RNUtils.getRealFilePath).toHaveBeenCalledWith('file://test'); + }); + + test('should log warning if no assets in response', async () => { + const mockResponse = {} as ImagePickerResponse; + + // @ts-expect-error getFilesFromResponse is private + const result = await filePickerUtil.getFilesFromResponse(mockResponse); + + expect(result).toEqual([]); + expect(logWarning).toHaveBeenCalledWith('no assets in response'); + }); + + test('should log warning if attaching file returns empty uri on Android', async () => { + Platform.OS = 'android'; + const mockResponse = { + assets: [{uri: 'file://test', type: 'image/jpeg', fileName: 'test.jpg'}], + } as ImagePickerResponse; + + (RNUtils.getRealFilePath as jest.Mock).mockResolvedValue(''); + + // @ts-expect-error getFilesFromResponse is private + const result = await filePickerUtil.getFilesFromResponse(mockResponse); + + expect(result).toEqual([]); + expect(logWarning).toHaveBeenCalledWith('attaching file reponse return empty uri', mockResponse.assets![0]); + }); + + test('should check and request photo permission correctly', async () => { + Platform.OS = 'ios'; + const source = 'camera'; + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.DENIED); + (Permissions.request as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + // @ts-expect-error hasPhotoPermission is private + const result = await filePickerUtil.hasPhotoPermission(source); + + expect(Permissions.check).toHaveBeenCalledWith(Permissions.PERMISSIONS.IOS.CAMERA); + expect(Permissions.request).toHaveBeenCalledWith(Permissions.PERMISSIONS.IOS.CAMERA); + expect(result).toBe(true); + }); + + test('should handle blocked photo permission correctly on iOS', async () => { + const source = 'camera'; + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.BLOCKED); + + const alertSpy = jest.spyOn(Alert, 'alert'); + + // @ts-expect-error hasPhotoPermission is private + const result = await filePickerUtil.hasPhotoPermission(source); + + expect(Permissions.check).toHaveBeenCalledWith(Permissions.PERMISSIONS.IOS.CAMERA); + expect(alertSpy).toHaveBeenCalled(); + expect(result).toBe(false); + }); + + test('should check and request storage permission correctly on Android', async () => { + Platform.OS = 'android'; + Platform.Version = 31; + const storagePermission = Permissions.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE; + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.DENIED); + (Permissions.request as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + // @ts-expect-error hasStoragePermission is private + const result = await filePickerUtil.hasStoragePermission(); + + expect(Permissions.check).toHaveBeenCalledWith(storagePermission); + expect(Permissions.request).toHaveBeenCalledWith(storagePermission); + expect(result).toBe(true); + }); + + test('should handle blocked storage permission correctly on Android', async () => { + Platform.OS = 'android'; + Platform.Version = 31; + const storagePermission = Permissions.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE; + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.BLOCKED); + + const alertSpy = jest.spyOn(Alert, 'alert'); + + // @ts-expect-error hasStoragePermission is private + const result = await filePickerUtil.hasStoragePermission(); + + expect(Permissions.check).toHaveBeenCalledWith(storagePermission); + expect(alertSpy).toHaveBeenCalled(); + expect(result).toBe(false); + }); + + test('should check and request write storage permission correctly on Android', async () => { + Platform.OS = 'android'; + Platform.Version = 28; + const storagePermission = Permissions.PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE; + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.DENIED); + (Permissions.request as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + // @ts-expect-error hasWriteStoragePermission is private + const result = await filePickerUtil.hasWriteStoragePermission(); + + expect(Permissions.check).toHaveBeenCalledWith(storagePermission); + expect(Permissions.request).toHaveBeenCalledWith(storagePermission); + expect(result).toBe(true); + }); + + test('should handle blocked write storage permission correctly on Android', async () => { + Platform.OS = 'android'; + Platform.Version = 28; + const storagePermission = Permissions.PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE; + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.BLOCKED); + + const alertSpy = jest.spyOn(Alert, 'alert'); + + // @ts-expect-error hasWriteStoragePermission is private + const result = await filePickerUtil.hasWriteStoragePermission(); + + expect(Permissions.check).toHaveBeenCalledWith(storagePermission); + expect(alertSpy).toHaveBeenCalled(); + expect(result).toBe(false); + }); + + test('should build URI correctly on Android', async () => { + Platform.OS = 'android'; + const doc = {uri: 'file://test', fileCopyUri: 'file://copy_test'} as DocumentPickerResponse; + + // @ts-expect-error buildUri is private + const result = await filePickerUtil.buildUri(doc); + + expect(result).toEqual({doc: {uri: 'file://copy_test', fileCopyUri: 'file://copy_test'}}); + }); + + test('should handle undefined new URI on Android', async () => { + Platform.OS = 'android'; + const doc = {uri: 'file://test'} as DocumentPickerResponse; + + (RNUtils.getRealFilePath as jest.Mock).mockResolvedValue(null); + + // @ts-expect-error buildUri is private + const result = await filePickerUtil.buildUri(doc); + + expect(result).toEqual({doc: undefined}); + }); + }); + + describe('attachFileFromCamera', () => { + test('should build URI correctly when fileCopyUri is undefined on Android', async () => { + Platform.OS = 'android'; + const doc = {uri: 'file://test'} as DocumentPickerResponse; + + (RNUtils.getRealFilePath as jest.Mock).mockResolvedValue('file://real_path'); + + // @ts-expect-error buildUri is private + const result = await filePickerUtil.buildUri(doc); + + expect(result).toEqual({doc: {uri: 'file://real_path'}}); + }); + + test('should not launch camera if permission is denied', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.DENIED); + (Permissions.request as jest.Mock).mockResolvedValue(Permissions.RESULTS.DENIED); + + const launchCameraMock = launchCamera as jest.Mock; + + await filePickerUtil.attachFileFromCamera(); + + expect(Permissions.check).toHaveBeenCalledWith(expect.any(String)); + expect(launchCameraMock).not.toHaveBeenCalled(); + }); + + test('should launch camera if permission is granted', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const launchCameraMock = launchCamera as jest.Mock; + launchCameraMock.mockImplementation((options, callback) => { + callback({assets: [{uri: 'file://camera_photo.jpg', type: 'image/jpeg', fileName: 'photo.jpg'}]}); + }); + + const mockExtractedFiles = [{fileName: 'photo.jpg', type: 'image/jpeg', uri: 'file://real_camera_photo.jpg'}]; + + (extractFileInfo as jest.Mock).mockResolvedValue(mockExtractedFiles); + + await filePickerUtil.attachFileFromCamera(); + + expect(launchCameraMock).toHaveBeenCalled(); + await TestHelper.wait(100); + expect(mockUploadFiles).toHaveBeenCalledWith([{ + uri: 'file://real_camera_photo.jpg', + type: 'image/jpeg', + fileName: 'photo.jpg', + }]); + }); + + test('should handle cancelled camera response', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const launchCameraMock = launchCamera as jest.Mock; + launchCameraMock.mockImplementation((options, callback) => { + callback({didCancel: true}); + }); + + await filePickerUtil.attachFileFromCamera(); + + expect(launchCameraMock).toHaveBeenCalled(); + expect(mockUploadFiles).not.toHaveBeenCalled(); + }); + + test('should handle camera error response', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const launchCameraMock = launchCamera as jest.Mock; + launchCameraMock.mockImplementation((options, callback) => { + callback({errorCode: 'camera_unavailable'}); + }); + + await filePickerUtil.attachFileFromCamera(); + + expect(launchCameraMock).toHaveBeenCalled(); + expect(mockUploadFiles).not.toHaveBeenCalled(); + }); + + test('should request write storage permission for Android API <= 28', async () => { + Platform.OS = 'android'; + Platform.Version = 28; + + (Permissions.check as jest.Mock).mockImplementation((permission) => { + if (permission === Permissions.PERMISSIONS.ANDROID.CAMERA) { + return Permissions.RESULTS.GRANTED; + } + return Permissions.RESULTS.DENIED; + }); + + (Permissions.request as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const mockExtractedFiles = [{fileName: 'photo.jpg', type: 'image/jpeg', uri: 'file://real_camera_photo.jpg'}]; + + (extractFileInfo as jest.Mock).mockResolvedValue(mockExtractedFiles); + + const launchCameraMock = launchCamera as jest.Mock; + launchCameraMock.mockImplementation((options, callback) => { + callback({assets: [{uri: 'file://camera_photo.jpg', type: 'image/jpeg', fileName: 'photo.jpg'}]}); + }); + + await filePickerUtil.attachFileFromCamera(); + + expect(Permissions.check).toHaveBeenCalledWith(Permissions.PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); + expect(launchCameraMock).toHaveBeenCalled(); + await TestHelper.wait(100); + expect(mockUploadFiles).toHaveBeenCalledWith([{ + uri: 'file://real_camera_photo.jpg', + type: 'image/jpeg', + fileName: 'photo.jpg', + }]); + }); + + test('should not launch camera if write storage permission is denied on Android API <= 28', async () => { + Platform.OS = 'android'; + Platform.Version = 28; + + (Permissions.check as jest.Mock).mockImplementation((permission) => { + if (permission === Permissions.PERMISSIONS.ANDROID.CAMERA) { + return Permissions.RESULTS.GRANTED; + } + return Permissions.RESULTS.DENIED; + }); + + (Permissions.request as jest.Mock).mockResolvedValue(Permissions.RESULTS.DENIED); + + const launchCameraMock = launchCamera as jest.Mock; + + await filePickerUtil.attachFileFromCamera(); + + expect(Permissions.check).toHaveBeenCalledWith(Permissions.PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); + expect(launchCameraMock).not.toHaveBeenCalled(); + }); + }); + + describe('attachFileFromFiles', () => { + test('should not pick files if permission is denied', async () => { + Platform.OS = 'android'; + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.DENIED); + (Permissions.request as jest.Mock).mockResolvedValue(Permissions.RESULTS.DENIED); + + const result = await filePickerUtil.attachFileFromFiles(); + + expect(DocumentPicker.pick).not.toHaveBeenCalled(); + expect(result).toEqual({error: 'no permission'}); + }); + + test('should pick files if permission is granted', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const docResponse: DocumentPickerResponse[] = [ + { + uri: 'file://document.pdf', + fileCopyUri: 'file://copy_document.pdf', + name: 'document', + type: 'pdf', + size: 10, + }, + ]; + + (DocumentPicker.pick as jest.Mock).mockResolvedValue(docResponse); + + const mockExtractedFiles = [{uri: 'file://real_document.pdf'}]; + + (extractFileInfo as jest.Mock).mockResolvedValue(mockExtractedFiles); + + const result = await filePickerUtil.attachFileFromFiles(); + + expect(DocumentPicker.pick).toHaveBeenCalledWith({ + allowMultiSelection: false, + type: ['public.item'], + copyTo: 'cachesDirectory', + }); + + await TestHelper.wait(100); + expect(mockUploadFiles).toHaveBeenCalledWith([ + {uri: 'file://real_document.pdf'}, + ]); + + expect(result).toEqual({error: undefined}); + }); + + test('should return error on DocumentPicker failure', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + const pickerError = new Error('Picker failed'); + + (DocumentPicker.pick as jest.Mock).mockRejectedValue(pickerError); + + const result = await filePickerUtil.attachFileFromFiles(); + + expect(DocumentPicker.pick).toHaveBeenCalled(); + expect(result).toEqual({error: pickerError}); + }); + + test('should allow multi-selection when specified', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const mockExtractedFiles = [ + {uri: 'file://real_document1.pdf'}, + {uri: 'file://real_document2.pdf'}, + ]; + + (extractFileInfo as jest.Mock).mockResolvedValue(mockExtractedFiles); + + const docResponse = [ + {uri: 'file://document1.pdf'}, + {uri: 'file://document2.pdf'}, + ]; + + (DocumentPicker.pick as jest.Mock).mockResolvedValue(docResponse); + + const result = await filePickerUtil.attachFileFromFiles(undefined, true); + + expect(DocumentPicker.pick).toHaveBeenCalledWith({ + allowMultiSelection: true, + type: ['public.item'], + copyTo: 'cachesDirectory', + }); + + expect(mockUploadFiles).toHaveBeenCalledWith([ + {uri: 'file://real_document1.pdf'}, + {uri: 'file://real_document2.pdf'}, + ]); + + expect(result).toEqual({error: undefined}); + }); + + test('should use specified file type', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const mockExtractedFiles = [{uri: 'file://real_image.jpg'}]; + + (extractFileInfo as jest.Mock).mockResolvedValue(mockExtractedFiles); + + const docResponse = [{uri: 'file://image.jpg', fileCopyUri: 'file://copy_image.jpg'}]; + + (DocumentPicker.pick as jest.Mock).mockResolvedValue(docResponse); + + const result = await filePickerUtil.attachFileFromFiles('image/*'); + + expect(DocumentPicker.pick).toHaveBeenCalledWith({ + allowMultiSelection: false, + type: ['image/*'], + copyTo: 'cachesDirectory', + }); + + expect(mockUploadFiles).toHaveBeenCalledWith([ + {uri: 'file://real_image.jpg'}, + ]); + + expect(result).toEqual({error: undefined}); + }); + + test('should default to Android file type if specified', async () => { + Platform.OS = 'android'; + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const docResponse = [{uri: 'file://document.pdf'}]; + + const mockExtractedFiles = [{uri: 'file://real_document.pdf'}]; + + (extractFileInfo as jest.Mock).mockResolvedValue(mockExtractedFiles); + + (DocumentPicker.pick as jest.Mock).mockResolvedValue(docResponse); + + const result = await filePickerUtil.attachFileFromFiles(); + + expect(DocumentPicker.pick).toHaveBeenCalledWith({ + allowMultiSelection: false, + type: ['*/*'], + copyTo: 'cachesDirectory', + }); + + expect(mockUploadFiles).toHaveBeenCalledWith([ + {uri: 'file://real_document.pdf'}, + ]); + + expect(result).toEqual({error: undefined}); + }); + }); + + describe('attachFileFromPhotoGallery', () => { + test('should not open the image library if permission is denied', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.DENIED); + (Permissions.request as jest.Mock).mockResolvedValue(Permissions.RESULTS.DENIED); + + await filePickerUtil.attachFileFromPhotoGallery(); + + expect(launchImageLibrary).not.toHaveBeenCalled(); + }); + + test('should open the image library if permission is granted', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const response: ImagePickerResponse = { + assets: [{uri: 'file://image1.jpg'}], + }; + + (launchImageLibrary as jest.Mock).mockImplementation((options, callback) => callback(response)); + + const mockExtractedFiles = [{uri: 'file://real_image1.jpg'}]; + + (extractFileInfo as jest.Mock).mockResolvedValue(mockExtractedFiles); + + await filePickerUtil.attachFileFromPhotoGallery(); + + expect(launchImageLibrary).toHaveBeenCalledWith({ + quality: 1, + mediaType: 'mixed', + includeBase64: false, + selectionLimit: 1, + }, expect.any(Function)); + + await TestHelper.wait(100); + expect(mockUploadFiles).toHaveBeenCalledWith([ + {uri: 'file://real_image1.jpg'}, + ]); + }); + + test('should handle error or cancellation in image library response', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const response: ImagePickerResponse = { + errorMessage: 'An error occurred', + didCancel: false, + }; + + (launchImageLibrary as jest.Mock).mockImplementation((options, callback) => callback(response)); + + await filePickerUtil.attachFileFromPhotoGallery(); + + expect(logWarning).toHaveBeenCalledWith('Attach failed', 'An error occurred'); + + const cancelledResponse: ImagePickerResponse = { + errorMessage: '', + didCancel: true, + }; + + (launchImageLibrary as jest.Mock).mockImplementation((options, callback) => callback(cancelledResponse)); + + await filePickerUtil.attachFileFromPhotoGallery(); + + expect(logWarning).toHaveBeenCalledWith('Attach failed', 'cancelled'); + }); + + test('should handle selection limit parameter', async () => { + (Permissions.check as jest.Mock).mockResolvedValue(Permissions.RESULTS.GRANTED); + + const response: ImagePickerResponse = { + assets: [{uri: 'file://image1.jpg'}, {uri: 'file://image2.jpg'}], + }; + + (launchImageLibrary as jest.Mock).mockImplementation((options, callback) => callback(response)); + const mockExtractedFiles = [{uri: 'file://real_image1.jpg'}, {uri: 'file://real_image2.jpg'}]; + + (extractFileInfo as jest.Mock).mockResolvedValue(mockExtractedFiles); + + await filePickerUtil.attachFileFromPhotoGallery(2); + + expect(launchImageLibrary).toHaveBeenCalledWith({ + quality: 1, + mediaType: 'mixed', + includeBase64: false, + selectionLimit: 2, + }, expect.any(Function)); + }); + }); +}); diff --git a/app/utils/file/file_picker/index.ts b/app/utils/file/file_picker/index.ts index 4944e6dc440..3daec52fed3 100644 --- a/app/utils/file/file_picker/index.ts +++ b/app/utils/file/file_picker/index.ts @@ -1,8 +1,9 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import {Alert, Linking, NativeModules, Platform, StatusBar} from 'react-native'; -import DeviceInfo from 'react-native-device-info'; +import RNUtils from '@mattermost/rnutils'; +import {applicationName} from 'expo-application'; +import {Alert, Linking, Platform, StatusBar} from 'react-native'; import DocumentPicker, {type DocumentPickerResponse} from 'react-native-document-picker'; import {type Asset, type CameraOptions, type ImageLibraryOptions, type ImagePickerResponse, launchCamera, launchImageLibrary} from 'react-native-image-picker'; import Permissions from 'react-native-permissions'; @@ -13,8 +14,6 @@ import {logWarning} from '@utils/log'; import type {IntlShape} from 'react-intl'; -const MattermostManaged = NativeModules.MattermostManaged; - type PermissionSource = 'camera' | 'storage' | 'photo_android' | 'photo_ios' | 'photo'; export default class FilePickerUtil { @@ -30,8 +29,6 @@ export default class FilePickerUtil { private getPermissionMessages = (source: PermissionSource) => { const {formatMessage} = this.intl; - const applicationName = DeviceInfo.getApplicationName(); - const permissions: Record = { camera: { title: formatMessage( @@ -126,13 +123,12 @@ export default class FilePickerUtil { await Promise.all((response.assets.map(async (file) => { if (Platform.OS === 'ios') { files.push(file); - } else { - // For android we need to retrieve the realPath in case the file being imported is from the cloud - const uri = (await MattermostManaged.getFilePath(file.uri)).filePath; + } else if (file.uri) { + const uri = await RNUtils.getRealFilePath(file.uri); const type = file.type || lookupMimeType(uri); let fileName = file.fileName; if (type.includes('video/') && uri) { - fileName = decodeURIComponent(uri.split('\\').pop().split('/').pop()); + fileName = decodeURIComponent(uri.split('\\').pop()?.split('/').pop() || ''); } if (uri) { @@ -259,23 +255,23 @@ export default class FilePickerUtil { }; private buildUri = async (doc: DocumentPickerResponse) => { - let uri: string = doc.uri; + let uri: string = doc.fileCopyUri || doc.uri; if (Platform.OS === 'android') { if (doc.fileCopyUri) { uri = doc.fileCopyUri; } else { // For android we need to retrieve the realPath in case the file being imported is from the cloud - const newUri = await MattermostManaged.getFilePath(doc.uri); - uri = newUri?.filePath; - if (uri === undefined) { + const newUri = await RNUtils.getRealFilePath(doc.uri); + if (newUri == null) { return {doc: undefined}; } - } - doc.uri = uri; + uri = newUri; + } } + doc.uri = uri; return {doc}; }; @@ -328,10 +324,13 @@ export default class FilePickerUtil { ); await this.prepareFileUpload(docs); + return {error: undefined}; } catch (error) { - // Do nothing + return {error}; } } + + return {error: 'no permission'}; }; attachFileFromPhotoGallery = async (selectionLimit = 1) => { diff --git a/app/utils/file/index.test.ts b/app/utils/file/index.test.ts new file mode 100644 index 00000000000..2112c089714 --- /dev/null +++ b/app/utils/file/index.test.ts @@ -0,0 +1,276 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {getInfoAsync, deleteAsync} from 'expo-file-system'; +import {Platform} from 'react-native'; +import Permissions from 'react-native-permissions'; + +import {getIntlShape} from '@utils/general'; +import {logError} from '@utils/log'; +import {urlSafeBase64Encode} from '@utils/security'; + +import {deleteFileCache, deleteFileCacheByDir, deleteV1Data, extractFileInfo, fileExists, fileMaxWarning, fileSizeWarning, filterFileExtensions, getAllFilesInCachesDirectory, getAllowedServerMaxFileSize, getExtensionFromContentDisposition, getExtensionFromMime, getFileType, getFormattedFileSize, getLocalFilePathFromFile, hasWriteStoragePermission, isDocument, isGif, isImage, isVideo, lookupMimeType, uploadDisabledWarning} from '.'; + +jest.mock('expo-file-system'); +jest.mock('react-native', () => { + const RN = jest.requireActual('react-native'); + return { + Platform: { + ...RN.Platform, + OS: 'ios', + }, + Alert: {alert: jest.fn()}, + Linking: {openSettings: jest.fn()}, + NativeModules: { + ...RN.NativeModules, + RNUtils: { + getConstants: () => ({ + appGroupIdentifier: 'group.mattermost.rnbeta', + appGroupSharedDirectory: { + sharedDirectory: '', + databasePath: '', + }, + }), + addListener: jest.fn(), + removeListeners: jest.fn(), + isRunningInSplitView: jest.fn().mockReturnValue({isSplit: false, isTablet: false}), + + getDeliveredNotifications: jest.fn().mockResolvedValue([]), + removeChannelNotifications: jest.fn().mockImplementation(), + removeThreadNotifications: jest.fn().mockImplementation(), + removeServerNotifications: jest.fn().mockImplementation(), + }, + }, + }; +}); +jest.mock('react-native-permissions', () => ({ + check: jest.fn(), + request: jest.fn(), + RESULTS: { + GRANTED: 'granted', + DENIED: 'denied', + BLOCKED: 'blocked', + }, + PERMISSIONS: {ANDROID: {WRITE_EXTERNAL_STORAGE: 'WRITE_EXTERNAL_STORAGE'}}, +})); +jest.mock('@utils/log', () => ({logError: jest.fn()})); +jest.mock('@utils/mattermost_managed', () => ({ + getIOSAppGroupDetails: () => ({appGroupSharedDirectory: 'appGroupSharedDirectory'}), + deleteEntitiesFile: jest.fn(), +})); +jest.mock('@utils/security', () => ({urlSafeBase64Encode: (url: string) => btoa(url)})); + +describe('Image utils', () => { + const intl = getIntlShape(); + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('filterFileExtensions', () => { + it('should return correct filter for each type', () => { + expect(filterFileExtensions('ALL')).toBe(''); + expect(filterFileExtensions('AUDIO')).toEqual(['mp3', 'wav', 'wma', 'm4a', 'flac', 'aac', 'ogg'].map((e) => `ext:${e}`).join(' ')); + expect(filterFileExtensions('CODE')).toEqual([ + 'as', 'applescript', 'osascript', 'scpt', 'bash', 'sh', 'zsh', 'clj', 'boot', 'cl2', 'cljc', 'cljs', + 'cljs.hl', 'cljscm', 'cljx', 'hic', 'coffee', '_coffee', 'cake', 'cjsx', 'cson', 'iced', 'cpp', 'c', 'cc', 'h', 'c++', + 'h++', 'hpp', 'cs', 'csharp', 'css', 'd', 'di', 'dart', 'delphi', 'dpr', 'dfm', 'pas', 'pascal', 'freepascal', 'lazarus', + 'lpr', 'lfm', 'diff', 'django', 'jinja', 'dockerfile', 'docker', 'erl', 'f90', 'f95', 'fsharp', 'fs', 'gcode', 'nc', 'go', + 'groovy', 'handlebars', 'hbs', 'html.hbs', 'html.handlebars', 'hs', 'hx', 'java', 'jsp', 'js', 'jsx', 'json', 'jl', 'kt', + 'ktm', 'kts', 'less', 'lisp', 'lua', 'mk', 'mak', 'md', 'mkdown', 'mkd', 'matlab', 'm', 'mm', 'objc', 'obj-c', 'ml', 'perl', + 'pl', 'php', 'php3', 'php4', 'php5', 'php6', 'ps', 'ps1', 'pp', 'py', 'gyp', 'r', 'ruby', 'rb', 'gemspec', 'podspec', 'thor', + 'irb', 'rs', 'scala', 'scm', 'sld', 'scss', 'st', 'sql', 'swift', 'ts', 'tex', 'vbnet', 'vb', 'bas', 'vbs', 'v', 'veo', 'xml', + 'html', 'xhtml', 'rss', 'atom', 'xsl', 'plist', 'yaml'].map((e) => `ext:${e}`).join(' ')); + expect(filterFileExtensions('DOCUMENTS')).toEqual(['doc', 'docx', 'odt', 'pdf', 'txt', 'rtf'].map((e) => `ext:${e}`).join(' ')); + expect(filterFileExtensions('IMAGES')).toEqual(['jpg', 'gif', 'bmp', 'png', 'jpeg', 'tiff', 'tif', 'svg', 'psd', 'xcf'].map((e) => `ext:${e}`).join(' ')); + expect(filterFileExtensions('PRESENTATIONS')).toEqual(['ppt', 'pptx', 'odp'].map((e) => `ext:${e}`).join(' ')); + expect(filterFileExtensions('SPREADSHEETS')).toEqual(['xls', 'xlsx', 'csv', 'ods'].map((e) => `ext:${e}`).join(' ')); + expect(filterFileExtensions('VIDEOS')).toEqual(['mp4', 'avi', 'webm', 'mkv', 'wmv', 'mpg', 'mov', 'flv', 'ogm', 'mpeg'].map((e) => `ext:${e}`).join(' ')); + expect(filterFileExtensions()).toBe(''); + }); + }); + + describe('deleteV1Data', () => { + it('should delete V1 data', async () => { + await deleteV1Data(); + expect(deleteAsync).toHaveBeenCalled(); + Platform.OS = 'android'; + await deleteV1Data(); + expect(deleteAsync).toHaveBeenCalled(); + Platform.OS = 'ios'; + }); + }); + + describe('deleteFileCache', () => { + it('should delete file cache', async () => { + await deleteFileCache('http://server.com'); + expect(deleteAsync).toHaveBeenCalled(); + }); + }); + + describe('deleteFileCacheByDir', () => { + it('should delete file cache by dir', async () => { + await deleteFileCacheByDir('someDir'); + expect(deleteAsync).toHaveBeenCalled(); + }); + }); + + describe('lookupMimeType', () => { + it('should return correct mime type', () => { + expect(lookupMimeType('file.txt')).toBe('text/plain'); + expect(lookupMimeType('file.jpg')).toBe('image/jpeg'); + expect(lookupMimeType('file.era')).toBe('application/octet-stream'); + }); + }); + + describe('getExtensionFromMime', () => { + it('should return correct extension from mime type', () => { + expect(getExtensionFromMime('application/json')).toBe('json'); + expect(getExtensionFromMime('image/png')).toBe('png'); + expect(getExtensionFromMime('video/mp4')).toBe('mp4'); + }); + }); + + describe('getExtensionFromContentDisposition', () => { + it('should return correct extension from content disposition', () => { + expect(getExtensionFromContentDisposition('inline;filename="file.txt";')).toBe('txt'); + expect(getExtensionFromContentDisposition('inline;filename="file.jpg";')).toBe('jpg'); + expect(getExtensionFromContentDisposition('inline;')).toBe(null); + }); + }); + + describe('getAllowedServerMaxFileSize', () => { + it('should return correct max file size', () => { + expect(getAllowedServerMaxFileSize({MaxFileSize: '10485760'} as ClientConfig)).toBe(10485760); + expect(getAllowedServerMaxFileSize({MaxFileSize: '10485a60'} as ClientConfig)).toBe(10485); + expect(getAllowedServerMaxFileSize({MaxFileSize: ''} as ClientConfig)).toBe(50 * 1024 * 1024); + }); + }); + + describe('isGif', () => { + it('should correctly identify gif files', () => { + expect(isGif({name: 'file.gif', mimeType: 'image/gif'} as unknown as FileInfo)).toBe(true); + expect(isGif({name: 'file.png', mimeType: 'image/gif'} as unknown as FileInfo)).toBe(true); + expect(isGif({name: 'file.png', mimeType: 'image/png'} as unknown as FileInfo)).toBe(false); + expect(isGif()).toBe(false); + }); + }); + + describe('isImage', () => { + it('should correctly identify image files', () => { + expect(isImage({name: 'file.png', mimeType: 'image/png'} as unknown as FileInfo)).toBe(true); + expect(isImage({name: 'file.jpg', mimeType: 'image/jpeg'} as unknown as FileInfo)).toBe(true); + expect(isImage({name: 'file.png', mimeType: 'text/plain'} as unknown as FileInfo)).toBe(false); + expect(isImage({name: 'file.png', extension: '.png'} as unknown as FileInfo)).toBe(true); + }); + }); + + describe('isDocument', () => { + it('should correctly identify document files', () => { + expect(isDocument({name: 'file.pdf', mimeType: 'application/pdf'} as unknown as FileInfo)).toBe(true); + expect(isDocument({name: 'file.doc', mimeType: 'application/vnd.apple.pages'} as unknown as FileInfo)).toBe(true); + expect(isDocument({name: 'file.mp4', mimeType: 'video/mp4'} as unknown as FileInfo)).toBe(false); + expect(isDocument({name: 'file.doc', mimeType: 'application/msword'} as unknown as FileInfo)).toBe(true); + }); + }); + + describe('isVideo', () => { + it('should correctly identify video files', () => { + expect(isVideo({name: 'file.mp4', mimeType: 'video/mp4'} as unknown as FileInfo)).toBe(true); + expect(isVideo({name: 'file.mov', mimeType: 'video/quicktime'} as unknown as FileInfo)).toBe(true); + expect(isVideo({name: 'file.mkv', mimeType: 'video/x-matroska'} as unknown as FileInfo)).toBe(false); + }); + }); + + describe('getFormattedFileSize', () => { + it('should return correct formatted file size', () => { + expect(getFormattedFileSize(102)).toBe('102 B'); + expect(getFormattedFileSize(1024)).toBe('1024 B'); + expect(getFormattedFileSize(1025)).toBe('1 KB'); + expect(getFormattedFileSize(10 * 1024 * 1024)).toBe('10 MB'); + expect(getFormattedFileSize(10 * 1024 * 1024 * 1024)).toBe('10 GB'); + expect(getFormattedFileSize(10 * 1024 * 1024 * 1024 * 1024)).toBe('10 TB'); + }); + }); + + describe('getFileType', () => { + it('should return correct file type', () => { + expect(getFileType({extension: 'png'} as unknown as FileInfo)).toBe('image'); + expect(getFileType({extension: 'mp4'} as unknown as FileInfo)).toBe('video'); + expect(getFileType({extension: 'pdf'} as unknown as FileInfo)).toBe('pdf'); + expect(getFileType({extension: 'arr'} as unknown as FileInfo)).toBe('other'); + expect(getFileType({} as unknown as FileInfo)).toBe('other'); + }); + }); + + describe('getLocalFilePathFromFile', () => { + it('should return correct local file path from file', () => { + expect(getLocalFilePathFromFile('http://server.com', {id: 'someid', name: 'image.png', extension: 'png'} as unknown as FileInfo)).toBe(`file://test-cache-directory/${urlSafeBase64Encode('http://server.com')}/image-someid.png`); + expect(getLocalFilePathFromFile('http://server.com', {id: 'someid', name: 'image.png'} as unknown as FileInfo)).toBe(`file://test-cache-directory/${urlSafeBase64Encode('http://server.com')}/image-someid.png`); + expect(getLocalFilePathFromFile('http://server.com', {id: 'someid', extension: 'png'} as unknown as FileInfo)).toBe(`file://test-cache-directory/${urlSafeBase64Encode('http://server.com')}/someid.png`); + expect(getLocalFilePathFromFile('http://server.com', {id: 'someid'} as unknown as FileInfo)).toBe(`file://test-cache-directory/${urlSafeBase64Encode('http://server.com')}/someid`); + expect(() => getLocalFilePathFromFile('http://server.com', {extension: 'png'} as unknown as FileInfo)).toThrow('File path could not be set'); + }); + }); + + describe('extractFileInfo', () => { + it('should extract file info correctly', async () => { + const files = [{uri: 'file://somefile', fileSize: 12345, fileName: 'file.png', type: 'image/png'}]; + let result = await extractFileInfo([]); + expect(result).toEqual([]); + result = await extractFileInfo([{fileName: 'file.png'}]); + expect(result).toEqual([]); + expect(logError).toHaveBeenCalled(); + result = await extractFileInfo(files); + expect(result).toEqual(expect.any(Array)); + result = await extractFileInfo([{uri: 'file://somefile', size: 12345, fileName: 'file.png', type: 'image/png'}]); + expect(result).toEqual(expect.any(Array)); + }); + }); + + describe('fileSizeWarning', () => { + it('should return correct file size warning', () => { + const msg = fileSizeWarning(intl, 10485760); + expect(msg).toBe('Files must be less than 10 MB'); + }); + }); + + describe('fileMaxWarning', () => { + it('should return correct file max warning', () => { + const msg = fileMaxWarning(intl, 10); + expect(msg).toBe('Uploads limited to 10 files maximum.'); + }); + }); + + describe('uploadDisabledWarning', () => { + it('should return correct upload disabled warning', () => { + const msg = uploadDisabledWarning(intl); + expect(msg).toBe('File uploads from mobile are disabled.'); + }); + }); + + describe('fileExists', () => { + it('should check if file exists', async () => { + // @ts-expect-error type def + getInfoAsync.mockResolvedValue({exists: true}); + const exists = await fileExists('somePath'); + expect(exists).toBe(true); + }); + }); + + describe('hasWriteStoragePermission', () => { + it('should check write storage permission', async () => { + // @ts-expect-error type def + Permissions.check.mockResolvedValue(Permissions.RESULTS.GRANTED); + const result = await hasWriteStoragePermission(intl); + expect(result).toBe(true); + }); + }); + + describe('getAllFilesInCachesDirectory', () => { + it('should get all files in caches directory', async () => { + const result = await getAllFilesInCachesDirectory('http://server.com'); + expect(result.files).toEqual(expect.any(Array)); + }); + }); +}); + diff --git a/app/utils/file/index.ts b/app/utils/file/index.ts index 3bbfac1bf7c..39c2a145c6d 100644 --- a/app/utils/file/index.ts +++ b/app/utils/file/index.ts @@ -2,17 +2,20 @@ // See LICENSE.txt for license information. import Model from '@nozbe/watermelondb/Model'; +import {applicationName} from 'expo-application'; +import { + cacheDirectory, deleteAsync, documentDirectory, getInfoAsync, + type FileInfo as ExpoFileInfo, makeDirectoryAsync, +} from 'expo-file-system'; import mimeDB from 'mime-db'; import {Alert, Linking, Platform} from 'react-native'; -import DeviceInfo from 'react-native-device-info'; -import FileSystem from 'react-native-fs'; import Permissions, {PERMISSIONS} from 'react-native-permissions'; import {Files} from '@constants'; import {generateId} from '@utils/general'; import keyMirror from '@utils/key_mirror'; import {logError} from '@utils/log'; -import {deleteEntititesFile, getIOSAppGroupDetails} from '@utils/mattermost_managed'; +import {deleteEntitiesFile, getIOSAppGroupDetails} from '@utils/mattermost_managed'; import {urlSafeBase64Encode} from '@utils/security'; import {FileTypes} from './constants'; @@ -143,22 +146,22 @@ function populateMaps() { } export async function deleteV1Data() { - const dir = Platform.OS === 'ios' ? getIOSAppGroupDetails().appGroupSharedDirectory : FileSystem.DocumentDirectoryPath; + const dir = Platform.OS === 'ios' ? getIOSAppGroupDetails().appGroupSharedDirectory : documentDirectory; try { const directory = `${dir}/mmkv`; - const mmkvDirInfo = await FileSystem.exists(directory); - if (mmkvDirInfo) { - await FileSystem.unlink(directory); + const mmkvDirInfo = await getInfoAsync(directory); + if (mmkvDirInfo.exists) { + await deleteAsync(directory); } } catch { // do nothing } try { - const entitiesInfo = await FileSystem.exists(`${dir}/entities`); - if (entitiesInfo) { - deleteEntititesFile(); + const entitiesInfo = await getInfoAsync(`${dir}/entities`); + if (entitiesInfo.exists) { + deleteEntitiesFile(); } } catch (e) { // do nothing @@ -176,7 +179,7 @@ export async function deleteFileCacheByDir(dir: string) { await deleteFilesInDir(appGroupCacheDir); } - const cacheDir = `${FileSystem.CachesDirectoryPath}/${dir}`; + const cacheDir = `${cacheDirectory}/${dir}`; await deleteFilesInDir(cacheDir); return true; @@ -184,17 +187,10 @@ export async function deleteFileCacheByDir(dir: string) { async function deleteFilesInDir(directory: string) { if (directory) { - const cacheDirInfo = await FileSystem.exists(directory); - if (cacheDirInfo) { - if (Platform.OS === 'ios') { - await FileSystem.unlink(directory); - await FileSystem.mkdir(directory); - } else { - const lstat = await FileSystem.readDir(directory); - lstat.forEach((stat: FileSystem.ReadDirItem) => { - FileSystem.unlink(stat.path); - }); - } + const cacheDirInfo = await getInfoAsync(directory); + if (cacheDirInfo.exists) { + await deleteAsync(directory, {idempotent: true}); + await makeDirectoryAsync(directory, {intermediates: true}); } } } @@ -379,7 +375,7 @@ export const getFormat = (ext: string) => { return FileTypes.OTHER; }; -export function getFileType(file: FileInfo): string { +export function getFileType(file: FileInfo | ExtractedFileInfo): string { if (!file || !file.extension) { return 'other'; } @@ -432,11 +428,11 @@ export function getLocalFilePathFromFile(serverUrl: string, file: FileInfo | Fil } } - return `${FileSystem.CachesDirectoryPath}/${server}/${filename}-${fileIdPath}.${extension}`; + return `${cacheDirectory}${server}/${filename}-${fileIdPath}.${extension}`; } else if (file?.id && hasValidExtension) { - return `${FileSystem.CachesDirectoryPath}/${server}/${fileIdPath}.${file.extension}`; + return `${cacheDirectory}${server}/${fileIdPath}.${file.extension}`; } else if (file?.id) { - return `${FileSystem.CachesDirectoryPath}/${server}/${fileIdPath}`; + return `${cacheDirectory}${server}/${fileIdPath}`; } } @@ -463,14 +459,13 @@ export async function extractFileInfo(files: Array { try { - const filePath = Platform.select({ios: path.replace('file://', ''), default: path}); - return FileSystem.exists(filePath); + const file = await getInfoAsync(path); + return file.exists; } catch { return false; } @@ -533,7 +528,6 @@ export const hasWriteStoragePermission = async (intl: IntlShape) => { permissionRequest = await Permissions.request(storagePermission); return permissionRequest === Permissions.RESULTS.GRANTED; case Permissions.RESULTS.BLOCKED: { - const applicationName = DeviceInfo.getApplicationName(); const title = intl.formatMessage( { id: 'mobile.storage_permission_denied_title', @@ -577,23 +571,28 @@ export const hasWriteStoragePermission = async (intl: IntlShape) => { export const getAllFilesInCachesDirectory = async (serverUrl: string) => { try { - const files: FileSystem.ReadDirItem[][] = []; + const files: ExpoFileInfo[] = []; - const promises = [FileSystem.readDir(`${FileSystem.CachesDirectoryPath}/${urlSafeBase64Encode(serverUrl)}`)]; + const promises = [getInfoAsync(`${cacheDirectory}/${urlSafeBase64Encode(serverUrl)}`, {size: true})]; if (Platform.OS === 'ios') { const cacheDir = `${getIOSAppGroupDetails().appGroupSharedDirectory}/Library/Caches/${urlSafeBase64Encode(serverUrl)}`; - promises.push(FileSystem.readDir(cacheDir)); + promises.push(getInfoAsync(cacheDir, {size: true})); } const dirs = await Promise.allSettled(promises); dirs.forEach((p) => { - if (p.status === 'fulfilled') { + if (p.status === 'fulfilled' && 'size' in p.value) { files.push(p.value); } }); const flattenedFiles = files.flat(); - const totalSize = flattenedFiles.reduce((acc, file) => acc + file.size, 0); + const totalSize = flattenedFiles.reduce((acc, file) => { + if ('size' in file) { + return acc + file.size; + } + return acc; + }, 0); return { files: flattenedFiles, totalSize, diff --git a/app/utils/files.test.ts b/app/utils/files.test.ts new file mode 100644 index 00000000000..fd8de8b9bc1 --- /dev/null +++ b/app/utils/files.test.ts @@ -0,0 +1,110 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import testHelper from '@test/test_helper'; + +import {toMilliseconds} from './datetime'; +import {getNumberFileMenuOptions, getChannelNamesWithID, getOrderedFileInfos, getFileInfosIndexes, getOrderedGalleryItems, pathWithPrefix} from './files'; + +import type ChannelModel from '@typings/database/models/servers/channel'; + +describe('Files utils', () => { + const buildFileInfos = (): FileInfo[] => { + return [{ + id: testHelper.generateId(), + create_at: Date.now() + toMilliseconds({days: 3, hours: 12, minutes: 8, seconds: 23}), + post_id: '123', + size: 10, + height: 0, + width: 0, + mime_type: 'application/pdf', + user_id: 'me', + extension: 'pdf', + name: 'file 3', + has_preview_image: false, + }, { + id: testHelper.generateId(), + create_at: Date.now() + toMilliseconds({days: 1, hours: 14}), + post_id: '123', + size: 10, + height: 100, + width: 100, + mime_type: 'image/png', + user_id: 'me', + extension: 'png', + name: 'file 2', + has_preview_image: true, + }, { + id: testHelper.generateId(), + create_at: Date.now() + toMilliseconds({days: 1, hours: 12, minutes: 10}), + post_id: '123', + size: 10, + height: 200, + width: 200, + mime_type: 'video/mp4', + user_id: 'me', + extension: 'mp4', + name: 'file 1', + has_preview_image: false, + }]; + }; + + test('getNumberFileMenuOptions', () => { + expect(getNumberFileMenuOptions(false, false)).toBe(1); + expect(getNumberFileMenuOptions(true, false)).toBe(2); + expect(getNumberFileMenuOptions(false, true)).toBe(2); + expect(getNumberFileMenuOptions(true, true)).toBe(3); + }); + + test('getChannelNamesWithID', () => { + const displayNames = ['channel 1', 'channel 2', 'channel 3']; + const channels = displayNames.map((d, i) => ({ + id: i.toString(), + displayName: d, + } as ChannelModel)); + const expected = channels.reduce>((obj, channel) => { + obj[channel.id] = channel.displayName; + return obj; + }, {}); + + expect(getChannelNamesWithID(channels)).toEqual(expected); + }); + + test('getOrderedFileInfos', () => { + let fileInfos = buildFileInfos(); + const result = getOrderedFileInfos(fileInfos); + const names = result.map((f) => f.name); + expect(names).toEqual(['file 3', 'file 2', 'file 1']); + + // testing the variant without setting create_at + fileInfos = fileInfos.map((f) => ({ + ...f, + create_at: undefined, + })); + const result2 = getOrderedFileInfos(fileInfos); + const names2 = result2.map((f) => f.name); + expect(names2).toEqual(names); + }); + + test('getFileInfosIndexes', () => { + const fileInfos = getOrderedFileInfos(buildFileInfos()); + const result = [0, 1, 2].reduce>((obj, index) => { + obj[fileInfos[index].id!] = index; + return obj; + }, {}); + + expect(getFileInfosIndexes(fileInfos)).toEqual(result); + }); + + test('getOrderedGalleryItems', () => { + const fileInfos = getOrderedFileInfos(buildFileInfos()); + const result = getOrderedGalleryItems(fileInfos); + const types = result.map((f) => f.type); + expect(types).toEqual(['file', 'image', 'video']); + }); + + test('pathWithPrefix', () => { + expect(pathWithPrefix('file://', 'file://something')).toEqual('file://something'); + expect(pathWithPrefix('file://', 'something')).toEqual('file://something'); + }); +}); diff --git a/app/utils/font_family.test.ts b/app/utils/font_family.test.ts new file mode 100644 index 00000000000..f113737f106 --- /dev/null +++ b/app/utils/font_family.test.ts @@ -0,0 +1,129 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {cloneElement} from 'react'; +import {Text, StyleSheet} from 'react-native'; + +import setFontFamily from './font_family'; + +// Type for style object +type StyleObject = { [key: string]: any }; + +// Custom function to flatten styles +const flattenStyles = (styles: StyleObject | Array): StyleObject|undefined => { + if (styles === null || typeof styles !== 'object') { + return undefined; + } + + if (!Array.isArray(styles)) { + return styles; + } + + return styles.reduce((acc, style) => { + if (!style) { + return acc; + } // Skip if style is null or undefined + + if (Array.isArray(style)) { + // Merge arrays of styles + return style.reduce((prev, curr) => ({ + ...prev, + ...flattenStyles(curr), + }), acc); + } else if (typeof style === 'object') { + // Merge objects of styles + return {...acc, ...style}; + } + + // Skip if style is not an object or array + return acc; + }, {}); +}; + +// Mock the necessary parts of react-native +jest.mock('react-native', () => ({ + Text: { + render: jest.fn(), + }, + StyleSheet: { + create: jest.fn((styles) => styles), + }, +})); + +// Mock cloneElement +jest.mock('react', () => ({ + ...jest.requireActual('react'), + cloneElement: jest.fn((element, props) => { + // Merge the existing style with the new style + const mergedStyle = flattenStyles([props.style, ...(element.props.style ? [element.props.style] : [])]); + + // Return a new object with merged styles + return { + ...element, + props: { + ...element.props, + style: mergedStyle, + }, + }; + }), +})); + +describe('setFontFamily', () => { + let originalTextRender: any; + + beforeEach(() => { + // Capture the original Text.render before modification + // @ts-expect-error renderer is not exposed to TS definition + originalTextRender = Text.render; + }); + + // Restore the original implementations after each test + afterEach(() => { + jest.restoreAllMocks(); + }); + + test('overrides Text.render and applies custom styles', () => { + // Call the function to set the font family + setFontFamily(); + + // Check if the StyleSheet.create was called with the correct styles + expect(StyleSheet.create).toHaveBeenCalledWith({ + defaultText: { + fontFamily: 'OpenSans', + fontSize: 16, + }, + }); + + // Check if Text.render was overridden + // @ts-expect-error renderer is not exposed to TS definition + expect(Text.render).not.toBe(originalTextRender); + + // Create a mock origin render output + const mockOriginRenderOutput = { + props: { + style: [{color: 'red'}], + }, + }; + + // Set the old render function to return the mock output + (originalTextRender as jest.Mock).mockReturnValue(mockOriginRenderOutput); + + // Call the new render function + // @ts-expect-error renderer is not exposed to TS definition + const newRenderOutput = Text.render(); + + // Check if cloneElement was called with the correct arguments + expect(cloneElement).toHaveBeenCalledWith(mockOriginRenderOutput, { + style: [ + { + fontFamily: 'OpenSans', + fontSize: 16, + }, + [{color: 'red'}], + ], + }); + + // Verify the new render output has the expected styles + expect(newRenderOutput.props.style).toEqual({fontFamily: 'OpenSans', fontSize: 16, color: 'red'}); + }); +}); diff --git a/app/utils/font_family.ts b/app/utils/font_family.ts index 5da2abb6f23..c9a1c028d7a 100644 --- a/app/utils/font_family.ts +++ b/app/utils/font_family.ts @@ -18,11 +18,11 @@ const setFontFamily = () => { fontSize: 16, }, }); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + + // @ts-expect-error renderer is not exposed to TS definition const oldRender = Text.render; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + + // @ts-expect-error renderer is not exposed to TS definition Text.render = function render(...args) { const origin = oldRender.call(this, ...args); return cloneElement(origin, { diff --git a/app/utils/gallery/index.test.ts b/app/utils/gallery/index.test.ts new file mode 100644 index 00000000000..9c9c660c759 --- /dev/null +++ b/app/utils/gallery/index.test.ts @@ -0,0 +1,283 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {DeviceEventEmitter, Image, Keyboard} from 'react-native'; +import {Navigation} from 'react-native-navigation'; +import {measure, type AnimatedRef} from 'react-native-reanimated'; + +import {clamp, clampVelocity, fileToGalleryItem, freezeOtherScreens, friction, galleryItemToFileInfo, getImageSize, getShouldRender, measureItem, openGalleryAtIndex, typedMemo, workletNoop, workletNoopTrue} from '.'; + +import type {GalleryItemType, GalleryManagerSharedValues} from '@typings/screens/gallery'; + +jest.mock('@screens/navigation', () => ({ + showOverlay: jest.fn(), +})); + +jest.mock('react-native', () => { + const ReactNative = jest.requireActual('react-native'); + const { + NativeModules: RNNativeModules, + } = ReactNative; + + const NativeModules = { + ...RNNativeModules, + RNUtils: { + getConstants: () => ({ + appGroupIdentifier: 'group.mattermost.rnbeta', + appGroupSharedDirectory: { + sharedDirectory: '', + databasePath: '', + }, + }), + addListener: jest.fn(), + removeListeners: jest.fn(), + isRunningInSplitView: jest.fn().mockReturnValue({isSplit: false, isTablet: false}), + + getDeliveredNotifications: jest.fn().mockResolvedValue([]), + removeChannelNotifications: jest.fn().mockImplementation(), + removeThreadNotifications: jest.fn().mockImplementation(), + removeServerNotifications: jest.fn().mockImplementation(), + + unlockOrientation: jest.fn(), + }, + }; + + return Object.setPrototypeOf({ + NativeModules, + DeviceEventEmitter: { + emit: jest.fn(), + }, + Keyboard: { + dismiss: jest.fn(), + }, + }, ReactNative); +}); + +// Mock react-native-reanimated measure function +jest.mock('react-native-reanimated', () => ({ + measure: jest.fn(() => ({ + pageX: 100, + pageY: 200, + width: 300, + height: 400, + })), +})); + +describe('Gallery utils', () => { + afterAll(() => { + jest.clearAllMocks(); + }); + + describe('clamp', () => { + it('should clamp a value within the given bounds', () => { + expect(clamp(5, 1, 10)).toBe(5); + expect(clamp(-5, 0, 10)).toBe(0); + expect(clamp(15, 0, 10)).toBe(10); + }); + }); + + describe('clampVelocity', () => { + it('should clamp positive velocity within the given bounds', () => { + expect(clampVelocity(5, 1, 10)).toBe(5); + expect(clampVelocity(0.5, 1, 10)).toBe(1); + expect(clampVelocity(15, 1, 10)).toBe(10); + }); + + it('should clamp negative velocity within the given bounds', () => { + expect(clampVelocity(-5, 1, 10)).toBe(-5); + expect(clampVelocity(-0.5, 1, 10)).toBe(-1); + expect(clampVelocity(-15, 1, 10)).toBe(-10); + }); + }); + + describe('fileToGalleryItem', () => { + it('should convert file info to gallery item with image type', () => { + const file = { + extension: 'jpg', + height: 600, + id: '123', + mime_type: 'image/jpeg', + name: 'test-image', + post_id: 'post123', + size: 5000, + localPath: '/path/to/image.jpg', + width: 800, + } as FileInfo; + const result = fileToGalleryItem(file); + expect(result.type).toBe('image'); + expect(result.uri).toBe(file.localPath); + }); + + it('should convert file info to gallery item with video type', () => { + const file = { + extension: 'mp4', + height: 600, + id: '123', + mime_type: 'video/mp4', + name: 'test-video', + post_id: 'post123', + size: 10000, + localPath: '/path/to/video.mp4', + mini_preview: '/path/to/preview.jpg', + width: 800, + } as FileInfo; + const result = fileToGalleryItem(file); + expect(result.type).toBe('video'); + expect(result.posterUri).toBe(file.mini_preview); + }); + + it('should convert file info to gallery item with video type and assign a file id that starts with uid', () => { + const file = { + extension: 'mp4', + height: 600, + mime_type: 'video/mp4', + name: 'test-video', + post_id: 'post123', + size: 10000, + localPath: '/path/to/video.mp4', + mini_preview: '/path/to/preview.jpg', + width: 800, + } as FileInfo; + const result = fileToGalleryItem(file); + expect(result.id.startsWith('uid')).toBeTruthy(); + }); + }); + + describe('freezeOtherScreens', () => { + it('should emit freeze screen event', () => { + freezeOtherScreens(true); + expect(DeviceEventEmitter.emit).toHaveBeenCalledWith('FREEZE_SCREEN', true); + }); + }); + + describe('friction', () => { + it('should calculate friction based on value', () => { + expect(friction(100)).toBeGreaterThan(1); + expect(friction(-100)).toBeLessThan(0); + }); + }); + + describe('galleryItemToFileInfo', () => { + it('should convert gallery item to file info', () => { + const item = { + id: '123', + name: 'test-image', + width: 800, + height: 600, + extension: 'jpg', + mime_type: 'image/jpeg', + postId: 'post123', + authorId: 'user123', + } as GalleryItemType; + const result = galleryItemToFileInfo(item); + expect(result.id).toBe(item.id); + expect(result.name).toBe(item.name); + }); + }); + + describe('getShouldRender', () => { + it('should return true if index is within range of active index', () => { + expect(getShouldRender(5, 5)).toBe(true); + expect(getShouldRender(6, 5)).toBe(true); + expect(getShouldRender(9, 5)).toBe(false); + }); + }); + + describe('measureItem', () => { + it('should measure and set shared values', () => { + const ref = jest.fn() as unknown as AnimatedRef; + const sharedValues = { + x: {value: 0}, + y: {value: 0}, + width: {value: 0}, + height: {value: 0}, + } as GalleryManagerSharedValues; + measureItem(ref, sharedValues); + expect(sharedValues.x.value).toBe(100); + expect(sharedValues.y.value).toBe(200); + }); + + it('should measure and set shared values', () => { + const ref = jest.fn() as unknown as AnimatedRef; + const sharedValues = { + x: {value: 0}, + y: {value: 0}, + width: {value: 0}, + height: {value: 0}, + } as GalleryManagerSharedValues; + measureItem(ref, sharedValues); + expect(sharedValues.x.value).toBe(100); + expect(sharedValues.y.value).toBe(200); + }); + + it('should handle measure exception and set shared values out of the viewport', () => { + const ref = jest.fn() as unknown as AnimatedRef; + const sharedValues = { + x: {value: 0}, + y: {value: 0}, + width: {value: 0}, + height: {value: 0}, + } as GalleryManagerSharedValues; + (measure as jest.Mock).mockImplementationOnce(() => { + throw new Error('error'); + }); + measureItem(ref, sharedValues); + expect(sharedValues.x.value).toBe(999999); + expect(sharedValues.y.value).toBe(999999); + }); + }); + + describe('openGalleryAtIndex', () => { + it('should open gallery and freeze other screens', () => { + const galleryIdentifier = 'gallery1'; + const initialIndex = 0; + const items = [{id: '1', name: 'item1'}, {id: '2', name: 'item2'}] as GalleryItemType[]; + + openGalleryAtIndex(galleryIdentifier, initialIndex, items); + expect(Keyboard.dismiss).toHaveBeenCalled(); + expect(Navigation.setDefaultOptions).toHaveBeenCalled(); + }); + }); + + describe('typedMemo', () => { + it('should memoize component', () => { + const component = jest.fn(); + const memoizedComponent = typedMemo(component); + + // @ts-expect-error type in typedef + expect(memoizedComponent.type).toBe(component); + }); + }); + + describe('workletNoop', () => { + it('should execute without doing anything', () => { + expect(workletNoop()).toBeUndefined(); + }); + }); + + describe('workletNoopTrue', () => { + it('should always return true', () => { + expect(workletNoopTrue()).toBe(true); + }); + }); + + describe('getImageSize', () => { + it('should resolve with image size', async () => { + jest.spyOn(Image, 'getSize').mockImplementationOnce((uri, success) => { + success(800, 600); + }); + + const result = await getImageSize('test-uri'); + expect(result).toEqual({width: 800, height: 600}); + }); + + it('should reject on error', async () => { + jest.spyOn(Image, 'getSize').mockImplementationOnce((uri, success, failure) => { + // @ts-expect-error param + failure(new Error('Failed to get size')); + }); + + await expect(getImageSize('test-uri')).rejects.toThrow('Failed to get size'); + }); + }); +}); diff --git a/app/utils/gallery/index.ts b/app/utils/gallery/index.ts index 08973e67f2b..80148f71e9c 100644 --- a/app/utils/gallery/index.ts +++ b/app/utils/gallery/index.ts @@ -1,8 +1,9 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import RNUtils from '@mattermost/rnutils'; import React from 'react'; -import {DeviceEventEmitter, Keyboard, NativeModules, Platform} from 'react-native'; +import {DeviceEventEmitter, Image, Keyboard, Platform} from 'react-native'; import {Navigation, type Options, type OptionsLayout} from 'react-native-navigation'; import {measure, type AnimatedRef} from 'react-native-reanimated'; @@ -156,7 +157,7 @@ export function openGalleryAtIndex(galleryIdentifier: string, initialIndex: numb if (Platform.OS === 'ios') { // on iOS we need both the navigation & the module Navigation.setDefaultOptions({layout}); - NativeModules.SplitView.unlockOrientation(); + RNUtils.unlockOrientation(); } showOverlay(Screens.GALLERY, props, options); @@ -176,3 +177,9 @@ export const workletNoopTrue = () => { return true; }; + +export const getImageSize = (uri: string) => { + return new Promise<{width: number; height: number}>((resolve, reject) => { + Image.getSize(uri, (width, height) => resolve({width, height}), reject); + }); +}; diff --git a/app/utils/gallery/vectors.test.ts b/app/utils/gallery/vectors.test.ts new file mode 100644 index 00000000000..d5025dbf6de --- /dev/null +++ b/app/utils/gallery/vectors.test.ts @@ -0,0 +1,166 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import { + create, + add, + sub, + divide, + multiply, + invert, + set, + min, + max, + clamp, + eq, + useSharedVector, +} from './vectors'; + +// Mock the useSharedValue from react-native-reanimated +jest.mock('react-native-reanimated', () => ({ + useSharedValue: jest.fn((initialValue) => ({ + value: initialValue, + })), +})); + +describe('Vector operations', () => { + describe('create', () => { + it('should create a vector with given x and y', () => { + const vector = create(10, 20); + expect(vector).toEqual({x: 10, y: 20}); + }); + }); + + describe('useSharedVector', () => { + it('should create a shared vector with given x and y', () => { + const vector = useSharedVector(10, 20); + expect(vector.x.value).toBe(10); + expect(vector.y.value).toBe(20); + }); + + it('should use the same value for x and y if y is not provided', () => { + const vector = useSharedVector(15); + expect(vector.x.value).toBe(15); + expect(vector.y.value).toBe(15); + }); + }); + + describe('add', () => { + it('should add multiple vectors together', () => { + const v1 = create(10, 20); + const v2 = create(30, 40); + const result = add(v1, v2); + expect(result).toEqual({x: 40, y: 60}); + }); + }); + + describe('sub', () => { + it('should subtract multiple vectors', () => { + const v1 = create(30, 40); + const v2 = create(10, 20); + const result = sub(v1, v2); + expect(result).toEqual({x: 20, y: 20}); + }); + }); + + describe('multiply', () => { + it('should multiply multiple vectors', () => { + const v1 = create(10, 20); + const v2 = create(2, 3); + const result = multiply(v1, v2); + expect(result).toEqual({x: 20, y: 60}); + }); + }); + + describe('divide', () => { + it('should divide multiple vectors', () => { + const v1 = create(20, 40); + const v2 = create(2, 4); + const result = divide(v1, v2); + expect(result).toEqual({x: 10, y: 10}); + }); + + it('should return 0 when dividing by zero', () => { + const v1 = create(20, 40); + const v2 = create(0, 0); + const result = divide(v1, v2); + expect(result).toEqual({x: 0, y: 0}); + }); + }); + + describe('invert', () => { + it('should invert the vector', () => { + const v = create(10, -20); + const result = invert(v); + expect(result).toEqual({x: -10, y: 20}); + }); + }); + + describe('set', () => { + it('should set vector values using another vector', () => { + const vector = useSharedVector(0, 0); + const newValue = create(10, 20); + set(vector, newValue); + expect(vector.x.value).toBe(10); + expect(vector.y.value).toBe(20); + }); + + it('should set vector values using a callback function', () => { + const vector = useSharedVector(0, 0); + const callback = () => 5; + set(vector, callback); + expect(vector.x.value).toBe(5); + expect(vector.y.value).toBe(5); + }); + + it('should set vector values using shared values', () => { + const vector = useSharedVector(0, 0); + const sharedValue = 10; + set(vector, sharedValue); + expect(vector.x.value).toBe(10); + expect(vector.y.value).toBe(10); + }); + }); + + describe('min', () => { + it('should return the minimum of multiple vectors', () => { + const v1 = create(10, 20); + const v2 = create(30, 5); + const result = min(v1, v2); + expect(result).toEqual({x: 10, y: 5}); + }); + }); + + describe('max', () => { + it('should return the maximum of multiple vectors', () => { + const v1 = create(10, 20); + const v2 = create(30, 5); + const result = max(v1, v2); + expect(result).toEqual({x: 30, y: 20}); + }); + }); + + describe('clamp', () => { + it('should clamp vector within given bounds', () => { + const value = create(15, 5); + const lower = create(10, 10); + const upper = create(20, 20); + const result = clamp(value, lower, upper); + expect(result).toEqual({x: 15, y: 10}); + }); + }); + + describe('eq', () => { + it('should return true if vectors are equal', () => { + const v1 = create(10, 20); + const v2 = create(10, 20); + expect(eq(v1, v2)).toBe(true); + }); + + it('should return false if vectors are not equal', () => { + const v1 = create(10, 20); + const v2 = create(20, 10); + expect(eq(v1, v2)).toBe(false); + }); + }); +}); diff --git a/app/utils/gallery/vectors.ts b/app/utils/gallery/vectors.ts index a1508f54915..06db95f6eec 100644 --- a/app/utils/gallery/vectors.ts +++ b/app/utils/gallery/vectors.ts @@ -160,6 +160,7 @@ export const set = ( if (typeof value === 'function') { vector.x.value = value(); vector.y.value = value(); + return; } const x = get(isVector(value) ? value.x : value); diff --git a/app/utils/general/index.test.ts b/app/utils/general/index.test.ts new file mode 100644 index 00000000000..f83737295f5 --- /dev/null +++ b/app/utils/general/index.test.ts @@ -0,0 +1,108 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import ReactNativeHapticFeedback, {HapticFeedbackTypes} from 'react-native-haptic-feedback'; + +import {getIntlShape, emptyFunction, generateId, hapticFeedback, sortByNewest, isBetaApp, type SortByCreatAt} from './'; + +// Mock necessary modules +jest.mock('expo-application', () => ({ + applicationId: 'com.example.rnbeta', +})); + +jest.mock('expo-crypto', () => ({ + randomUUID: jest.fn(() => '12345678-1234-1234-1234-1234567890ab'), +})); + +jest.mock('react-intl', () => ({ + createIntl: jest.fn((config) => config), +})); + +jest.mock('react-native-haptic-feedback', () => ({ + trigger: jest.fn(), + HapticFeedbackTypes: { + impactLight: 'impactLight', + impactMedium: 'impactMedium', + }, +})); + +jest.mock('@i18n', () => ({ + getTranslations: jest.fn((locale) => ({message: `translations for ${locale}`})), + DEFAULT_LOCALE: 'en', +})); + +describe('getIntlShape', () => { + it('should return intl shape with default locale', () => { + const result = getIntlShape(); + expect(result).toEqual({ + locale: 'en', + messages: {message: 'translations for en'}, + }); + }); + + it('should return intl shape with specified locale', () => { + const result = getIntlShape('fr'); + expect(result).toEqual({ + locale: 'fr', + messages: {message: 'translations for fr'}, + }); + }); +}); + +describe('emptyFunction', () => { + it('should do nothing', () => { + expect(emptyFunction()).toBeUndefined(); + }); +}); + +describe('generateId', () => { + it('should generate an ID without prefix', () => { + const result = generateId(); + expect(result).toBe('12345678-1234-1234-1234-1234567890ab'); + }); + + it('should generate an ID with prefix', () => { + const result = generateId('prefix'); + expect(result).toBe('prefix-12345678-1234-1234-1234-1234567890ab'); + }); +}); + +describe('hapticFeedback', () => { + it('should trigger haptic feedback with default method', () => { + hapticFeedback(); + expect(ReactNativeHapticFeedback.trigger).toHaveBeenCalledWith('impactLight', { + enableVibrateFallback: false, + ignoreAndroidSystemSettings: false, + }); + }); + + it('should trigger haptic feedback with specified method', () => { + hapticFeedback(HapticFeedbackTypes.impactMedium); + expect(ReactNativeHapticFeedback.trigger).toHaveBeenCalledWith('impactMedium', { + enableVibrateFallback: false, + ignoreAndroidSystemSettings: false, + }); + }); +}); + +describe('sortByNewest', () => { + it('should sort by newest create_at', () => { + const a = {create_at: 2000} as SortByCreatAt; + const b = {create_at: 1000} as SortByCreatAt; + const result = sortByNewest(a, b); + expect(result).toBe(-1); + }); + + it('should sort by oldest create_at', () => { + const a = {create_at: 1000} as SortByCreatAt; + const b = {create_at: 2000} as SortByCreatAt; + const result = sortByNewest(a, b); + expect(result).toBe(1); + }); +}); + +describe('isBetaApp', () => { + it('should be true if applicationId includes rnbeta', () => { + expect(isBetaApp).toBe(true); + }); +}); diff --git a/app/utils/general/index.ts b/app/utils/general/index.ts index fb5a40d5999..5e4b99a2ac2 100644 --- a/app/utils/general/index.ts +++ b/app/utils/general/index.ts @@ -1,17 +1,18 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {applicationId} from 'expo-application'; +import {randomUUID} from 'expo-crypto'; import {createIntl} from 'react-intl'; -import DeviceInfo from 'react-native-device-info'; import ReactNativeHapticFeedback, {HapticFeedbackTypes} from 'react-native-haptic-feedback'; -import {getTranslations} from '@i18n'; +import {DEFAULT_LOCALE, getTranslations} from '@i18n'; -type SortByCreatAt = (Session | Channel | Team | Post) & { +export type SortByCreatAt = (Session | Channel | Team | Post) & { create_at: number; } -export function getIntlShape(locale = 'en') { +export function getIntlShape(locale = DEFAULT_LOCALE) { return createIntl({ locale, messages: getTranslations(locale), @@ -25,22 +26,7 @@ export function emptyFunction(..._args: any[]) { // Generates a RFC-4122 version 4 compliant globally unique identifier. export const generateId = (prefix?: string): string => { - // implementation taken from http://stackoverflow.com/a/2117523 - let id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'; - id = id.replace(/[xy]/g, (c) => { - const r = Math.floor(Math.random() * 16); - let v; - - if (c === 'x') { - v = r; - } else { - // eslint-disable-next-line no-mixed-operators - v = (r & 0x3) | 0x8; - } - - return v.toString(16); - }); - + const id = randomUUID(); if (prefix) { return `${prefix}-${id}`; } @@ -63,4 +49,4 @@ export const sortByNewest = (a: SortByCreatAt, b: SortByCreatAt) => { return 1; }; -export const isBetaApp = DeviceInfo.getBundleId && DeviceInfo.getBundleId().includes('rnbeta'); +export const isBetaApp = applicationId && applicationId.includes('rnbeta'); diff --git a/app/utils/groups.test.ts b/app/utils/groups.test.ts new file mode 100644 index 00000000000..6b7f6958cb4 --- /dev/null +++ b/app/utils/groups.test.ts @@ -0,0 +1,10 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {generateGroupAssociationId} from './groups'; + +describe('groups utility', () => { + test('generateGroupAssociationId', () => { + expect(generateGroupAssociationId('groupId', 'otherId')).toEqual('groupId-otherId'); + }); +}); diff --git a/app/utils/helpers.test.ts b/app/utils/helpers.test.ts index f328ea0a76d..fbea00872b2 100644 --- a/app/utils/helpers.test.ts +++ b/app/utils/helpers.test.ts @@ -1,48 +1,240 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import moment from 'moment-timezone'; +import {NativeModules, Platform} from 'react-native'; -import {areBothStringArraysEqual} from '@utils/helpers'; +import {STATUS_BAR_HEIGHT} from '@constants/view'; -describe('areBothStringArraysEqual', () => { - test('Should return false when length of arrays are not equal', () => { - const array1 = ['test1', 'test2']; - const array2 = ['test1']; +import { + isMinimumServerVersion, + buildQueryString, + isEmail, + identity, + safeParseJSON, + getCurrentMomentForTimezone, + getUtcOffsetForTimeZone, + toTitleCase, + getRoundedTime, + isTablet, + pluckUnique, + bottomSheetSnapPoint, + hasTrailingSpaces, + isMainActivity, + areBothStringArraysEqual, +} from './helpers'; - expect(areBothStringArraysEqual(array1, array2)).toEqual(false); +jest.mock('@mattermost/rnshare', () => ({ + default: { + getCurrentActivityName: jest.fn(). + mockReturnValueOnce('MainActivity'). + mockReturnValue('SomeOtherActivity'), + }, +})); + +describe('Helpers', () => { + afterAll(() => { + Platform.OS = 'ios'; + }); + + describe('isMinimumServerVersion', () => { + test('should return true if server version meets minimum requirements', () => { + expect(isMinimumServerVersion('4.6.0', 4, 6, 0)).toBe(true); + expect(isMinimumServerVersion('4.6.0', 4, 5, 0)).toBe(true); + expect(isMinimumServerVersion('4.6.1', 4, 6, 0)).toBe(true); + expect(isMinimumServerVersion('4')).toBe(true); + expect(isMinimumServerVersion('4.6', 4, 6)).toBe(true); + }); + + test('should return false if server version does not meet minimum requirements', () => { + expect(isMinimumServerVersion('4.5.0', 4, 6, 0)).toBe(false); + expect(isMinimumServerVersion('4.6.0', 4, 6, 1)).toBe(false); + }); + + test('currentVersion is not set or not a string', () => { + expect(isMinimumServerVersion()).toBe(false); + + // @ts-expect-error argument should be a string + expect(isMinimumServerVersion(0)).toBe(false); + }); + }); + + describe('buildQueryString', () => { + test('should build query string from object', () => { + const parameters = {key1: 'value1', key2: 'value2'}; + expect(buildQueryString(parameters)).toBe('?key1=value1&key2=value2'); + expect(buildQueryString({...parameters, key3: null})).toBe('?key1=value1&key2=value2'); + expect(buildQueryString({key0: null, ...parameters, key3: null})).toBe('?key1=value1&key2=value2'); + expect(buildQueryString({key1: 'value1', key0: null, key3: null, key2: 'value2'})).toBe('?key1=value1&key2=value2'); + }); + + test('should handle empty object', () => { + expect(buildQueryString({})).toBe(''); + }); + }); + + describe('isEmail', () => { + test('should validate correct emails', () => { + expect(isEmail('test@example.com')).toBe(true); + expect(isEmail('another@test.com')).toBe(true); + }); + + test('should invalidate incorrect emails', () => { + expect(isEmail('invalid')).toBe(false); + expect(isEmail('test@')).toBe(false); + expect(isEmail('test@localhost')).toBe(true); + expect(isEmail('test@example.com')).toBe(true); + }); + }); + + describe('identity', () => { + test('should return the same argument', () => { + expect(identity('test')).toBe('test'); + expect(identity(123)).toBe(123); + const obj = {}; + expect(identity(obj)).toBe(obj); + }); + }); + + describe('safeParseJSON', () => { + test('should parse valid JSON string', () => { + const jsonString = '{"key": "value"}'; + expect(safeParseJSON(jsonString)).toEqual({key: 'value'}); + }); + + test('should handle invalid JSON', () => { + expect(safeParseJSON('invalid-json')).toBe('invalid-json'); + }); + + test('should handle non-string input', () => { + expect(safeParseJSON({key: 'value'})).toEqual({key: 'value'}); + }); }); - test('Should return false when arrays are not equal', () => { - const array1 = ['test1', 'test2']; - const array2 = ['test1', 'test2', 'test3']; + describe('getCurrentMomentForTimezone', () => { + test('should return current moment in specified timezone', () => { + const timezone = 'America/New_York'; + const result = getCurrentMomentForTimezone(timezone); + expect(result.isValid()).toBe(true); + }); + + test('should return current moment if no timezone specified', () => { + const result = getCurrentMomentForTimezone(null); + expect(result.isValid()).toBe(true); + }); + }); - expect(areBothStringArraysEqual(array1, array2)).toEqual(false); + describe('toTitleCase', () => { + test('should convert string to title case', () => { + expect(toTitleCase('hello world')).toBe('Hello World'); + }); }); - test('Should return false when either array is empty', () => { - const array1 = ['test1', 'test2']; - const array2: string[] = []; + describe('getRoundedTime', () => { + test('should round time to nearest interval', () => { + const time = moment('2024-06-01T12:34:00Z'); + const result = getRoundedTime(time); + expect(result.minute() % 30).toBe(0); // Assuming CUSTOM_STATUS_TIME_PICKER_INTERVALS_IN_MINUTES is 15 - expect(areBothStringArraysEqual(array1, array2)).toEqual(false); + const time2 = moment('2024-06-01T12:00:00Z'); + const result2 = getRoundedTime(time2); + expect(result2.minute() % 30).toBe(0); + }); }); - test('Should return true when arrays are equal', () => { - const array1 = ['test1', 'test2']; - const array2 = ['test1', 'test2']; + describe('isTablet', () => { + test('should identify tablet correctly', () => { + console.log('split mock', NativeModules.RNUtils.isRunningInSplitView()); + expect(isTablet()).toBe(false); - expect(areBothStringArraysEqual(array1, array2)).toEqual(true); + const prevSplitViewModule = NativeModules.RNUtils.isRunningInSplitView; + NativeModules.RNUtils.isRunningInSplitView = jest.fn().mockReturnValue({isSplit: false, isTablet: true}); + console.log('split mock', NativeModules.RNUtils.isRunningInSplitView()); + expect(isTablet()).toBe(true); + NativeModules.RNUtils.isRunningInSplitView = jest.fn().mockReturnValue({isSplit: true, isTablet: true}); + expect(isTablet()).toBe(false); + NativeModules.RNUtils.isRunningInSplitView = prevSplitViewModule; // Restore original value + }); }); - test('Should return true when arrays are equal but in different order', () => { - const array1 = ['test1', 'test2']; - const array2 = ['test2', 'test1']; + // Add tests for other functions similarly + + describe('areBothStringArraysEqual', () => { + test('should compare two string arrays', () => { + const arr1 = ['apple', 'banana', 'cherry']; + const arr2 = ['banana', 'cherry', 'apple']; + expect(areBothStringArraysEqual(arr1, arr2)).toBe(true); + }); + + test('should return false for unequal arrays or empty', () => { + const arr1 = ['apple', 'banana', 'cherry']; + const arr2 = ['banana', 'cherry', 'orange']; + expect(areBothStringArraysEqual(arr1, arr2)).toBe(false); + expect(areBothStringArraysEqual(arr1, [...arr1, ...arr2])).toBe(false); + expect(areBothStringArraysEqual([], [])).toBe(false); + }); + }); - expect(areBothStringArraysEqual(array1, array2)).toEqual(true); + describe('getUtcOffsetForTimeZone', () => { + test('should return UTC offset for timezone', () => { + const timezone = 'America/New_York'; + const result = getUtcOffsetForTimeZone(timezone); + expect(result).toBe(moment.tz(timezone).utcOffset()); + }); }); + describe('pluckUnique', () => { + test('should pluck unique values based on key', () => { + const array = [ + {id: 1, name: 'John'}, + {id: 2, name: 'Jane'}, + {id: 1, name: 'John'}, + ]; + const result = pluckUnique('id')(array); + expect(result).toEqual([1, 2]); + }); + }); + + describe('bottomSheetSnapPoint', () => { + test('should calculate bottom sheet snap point', () => { + const itemsCount = 5; + const itemHeight = 50; + const bottomInset = 20; + const result = bottomSheetSnapPoint(itemsCount, itemHeight, bottomInset); + const expected = (itemsCount * itemHeight) + bottomInset + STATUS_BAR_HEIGHT; + expect(result).toBe(expected); + }); + }); + + describe('hasTrailingSpaces', () => { + test('should detect trailing spaces', () => { + const term = 'Hello '; + const result = hasTrailingSpaces(term); + expect(result).toBe(true); + }); + + test('should not detect trailing spaces', () => { + const term = 'Hello'; + const result = hasTrailingSpaces(term); + expect(result).toBe(false); + }); + }); + + describe('isMainActivity', () => { + test('should return true on iOS', () => { + Platform.OS = 'ios'; + const result = isMainActivity(); + expect(result).toBe(true); + }); - test('Should return true when both arrays are empty', () => { - const array1: string[] = []; - const array2: string[] = []; + test('should return true if current activity is MainActivity on Android', () => { + Platform.OS = 'android'; + const result = isMainActivity(); + expect(result).toBe(true); + }); - expect(areBothStringArraysEqual(array1, array2)).toEqual(false); + test('should return false if current activity is not MainActivity on Android', () => { + Platform.OS = 'android'; + const result = isMainActivity(); + expect(result).toBe(false); + }); }); }); diff --git a/app/utils/helpers.ts b/app/utils/helpers.ts index a3707b7309f..f654063aa8c 100644 --- a/app/utils/helpers.ts +++ b/app/utils/helpers.ts @@ -1,16 +1,13 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import RNUtils, {type SplitViewResult} from '@mattermost/rnutils'; import moment, {type Moment} from 'moment-timezone'; -import {NativeModules, Platform} from 'react-native'; +import {Platform} from 'react-native'; import {CUSTOM_STATUS_TIME_PICKER_INTERVALS_IN_MINUTES} from '@constants/custom_status'; import {STATUS_BAR_HEIGHT} from '@constants/view'; -const {SplitView} = NativeModules; -const {isRunningInSplitView} = SplitView; -const ShareModule: NativeShareExtension|undefined = Platform.select({android: NativeModules.MattermostShare}); - // isMinimumServerVersion will return true if currentVersion is equal to higher or than // the provided minimum version. A non-equal major version will ignore minor and dot // versions, and a non-equal minor version will ignore dot version. @@ -73,6 +70,10 @@ export function buildQueryString(parameters: Dictionary): string { } } + if (query.endsWith('&')) { + return query.slice(0, -1); + } + return query; } @@ -83,7 +84,10 @@ export function isEmail(email: string): boolean { // - followed by a single @ symbol // - followed by at least one character that is not a space, comma, or @ symbol // this prevents outlook.style@domain.com addresses and multiple comma-separated addresses from being accepted - return (/^[^ ,@]+@[^ ,@]+$/).test(email); + const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + const regexWithoutTLDN = /^[^\s@]+@[^\s@]+$/; + + return regex.test(email) || regexWithoutTLDN.test(email); } export function identity(arg: T): T { @@ -130,8 +134,8 @@ export function getRoundedTime(value: Moment) { } export function isTablet() { - const result: SplitViewResult = isRunningInSplitView(); - return result.isTablet && !result.isSplitView; + const result: SplitViewResult = RNUtils.isRunningInSplitView(); + return result.isTablet && !result.isSplit; } export const pluckUnique = (key: string) => (array: Array<{[key: string]: unknown}>) => Array.from(new Set(array.map((obj) => obj[key]))); @@ -152,10 +156,16 @@ export function hasTrailingSpaces(term: string) { * @returns boolean */ export function isMainActivity() { - return Platform.select({ - default: true, - android: ShareModule?.getCurrentActivityName() === 'MainActivity', - }); + if (Platform.OS === 'android') { + const MattermostShare = require('@mattermost/rnshare').default; + return MattermostShare?.getCurrentActivityName() === 'MainActivity'; + } + + return true; +} + +function localeCompare(a: string, b: string) { + return a.localeCompare(b); } export function areBothStringArraysEqual(a: string[], b: string[]) { @@ -167,8 +177,8 @@ export function areBothStringArraysEqual(a: string[], b: string[]) { return false; } - const aSorted = a.sort(); - const bSorted = b.sort(); + const aSorted = a.sort(localeCompare); + const bSorted = b.sort(localeCompare); const areBothEqual = aSorted.every((value, index) => value === bSorted[index]); return areBothEqual; diff --git a/app/utils/images/index.test.ts b/app/utils/images/index.test.ts new file mode 100644 index 00000000000..4e3036a3d59 --- /dev/null +++ b/app/utils/images/index.test.ts @@ -0,0 +1,152 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Dimensions} from 'react-native'; + +import {IMAGE_MAX_HEIGHT} from '@constants/image'; + +import { + calculateDimensions, + getViewPortWidth, + isGifTooLarge, +} from './index'; + +jest.mock('react-native', () => ({ + Dimensions: { + get: jest.fn(() => ({width: 800, height: 600})), + }, +})); + +jest.mock('@constants/image', () => ({ + IMAGE_MAX_HEIGHT: 800, + IMAGE_MIN_DIMENSION: 50, + MAX_GIF_SIZE: 1000000, + VIEWPORT_IMAGE_OFFSET: 20, + VIEWPORT_IMAGE_REPLY_OFFSET: 40, +})); + +jest.mock('@constants', () => ({ + View: { + TABLET_SIDEBAR_WIDTH: 100, + }, +})); + +describe('calculateDimensions', () => { + it('should return 0 dimensions when height and width are not provided', () => { + const result = calculateDimensions(); + expect(result).toEqual({height: 0, width: 0}); + }); + + it('should return correct dimensions when width exceeds viewport width', () => { + const result = calculateDimensions(200, 400, 300); + expect(result).toEqual({height: 150, width: 300}); + }); + + it('should assign imageHeight as IMAGE_MAX_HEIGHT when imageHeight exceeds IMAGE_MAX_HEIGHT and viewPortHeight is undefined', () => { + const result = calculateDimensions(900, 400, 600); + expect(result).toEqual({ + height: IMAGE_MAX_HEIGHT, + width: IMAGE_MAX_HEIGHT * (400 / 900), + }); + }); + + it('should return minimum dimensions when width is less than IMAGE_MIN_DIMENSION', () => { + const result = calculateDimensions(20, 30, 100); + expect(result).toEqual({height: 50, width: 75}); + }); + + it('should return correct dimensions when height exceeds IMAGE_MAX_HEIGHT', () => { + const result = calculateDimensions(900, 500, 600, 700); + expect(result).toEqual({height: 700, width: 388.8888888888889}); + }); + + it('should return minimum dimensions when height is less than IMAGE_MIN_DIMENSION', () => { + const result = calculateDimensions(30, 40, 100); + expect(result).toEqual({height: 50, width: 66.66666666666666}); + }); + + it('should assign imageHeight as viewPortHeight when imageHeight exceeds viewPortHeight and viewPortHeight is less than IMAGE_MAX_HEIGHT', () => { + const result = calculateDimensions(900, 400, 600, 700); + expect(result).toEqual({ + height: 700, + width: 700 * (400 / 900), + }); + }); + + it('should assign imageHeight and imageWidth based on IMAGE_MIN_DIMENSION when imageHeight is less than IMAGE_MIN_DIMENSION and fits within viewPortWidth', () => { + const result = calculateDimensions(20, 40, 100); + expect(result).toEqual({ + height: 50, + width: 50 * (40 / 20), + }); + }); + + it('should assign imageHeight and imageWidth based on viewPortHeight when imageHeight exceeds viewPortHeight', () => { + const result = calculateDimensions(600, 400, 500, 300); + expect(result).toEqual({ + height: 300, + width: 300 * (400 / 600), + }); + }); + + it('should assign imageHeight and imageWidth based on viewPortHeight when imageHeight exceeds viewPortHeight and previous conditions are not met', () => { + const result = calculateDimensions(1700, 900, 1000, 900); + expect(result).toEqual({ + height: 900, + width: 900 * (900 / 1700), + }); + }); +}); + +describe('getViewPortWidth', () => { + beforeEach(() => { + (Dimensions.get as jest.Mock).mockReturnValue({width: 800, height: 600}); + }); + + it('should calculate viewport width for normal post', () => { + const result = getViewPortWidth(false); + expect(result).toBe(580); + }); + + it('should calculate viewport width for reply post', () => { + const result = getViewPortWidth(true); + expect(result).toBe(540); + }); + + it('should calculate viewport width for tablet offset', () => { + const result = getViewPortWidth(false, true); + expect(result).toBe(480); + }); + + it('should calculate viewport width for reply post with tablet offset', () => { + const result = getViewPortWidth(true, true); + expect(result).toBe(440); + }); +}); + +describe('isGifTooLarge', () => { + it('should return false if image is not a gif', () => { + const result = isGifTooLarge({format: 'jpg', frame_count: 1, height: 500, width: 500}); + expect(result).toBe(false); + }); + + it('should return false if image metadata is undefined', () => { + const result = isGifTooLarge(undefined); + expect(result).toBe(false); + }); + + it('should return true if gif is too large', () => { + const result = isGifTooLarge({format: 'gif', frame_count: 100, height: 1000, width: 1000}); + expect(result).toBe(true); + }); + + it('should return false if gif is not too large', () => { + const result = isGifTooLarge({format: 'gif', frame_count: 10, height: 100, width: 100}); + expect(result).toBe(false); + }); + + it('should return false if gif does not specify frame count', () => { + const result = isGifTooLarge({format: 'gif', height: 100, width: 100}); + expect(result).toBe(false); + }); +}); diff --git a/app/utils/images/index.ts b/app/utils/images/index.ts index e61b3ed998c..e023d3e50f1 100644 --- a/app/utils/images/index.ts +++ b/app/utils/images/index.ts @@ -2,7 +2,6 @@ // See LICENSE.txt for license information. import {Dimensions} from 'react-native'; -import 'react-native-reanimated'; import {View} from '@constants'; import {IMAGE_MAX_HEIGHT, IMAGE_MIN_DIMENSION, MAX_GIF_SIZE, VIEWPORT_IMAGE_OFFSET, VIEWPORT_IMAGE_REPLY_OFFSET} from '@constants/image'; diff --git a/app/utils/integrations.test.ts b/app/utils/integrations.test.ts new file mode 100644 index 00000000000..8ea148750bf --- /dev/null +++ b/app/utils/integrations.test.ts @@ -0,0 +1,309 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {checkDialogElementForError, checkIfErrorsMatchElements, selectKeyboardType} from './integrations'; + +describe('checkDialogElementForError', () => { + test('returns required error for empty required field', () => { + const elem: DialogElement = { + name: 'field1', + type: 'text', + optional: false, + display_name: '', + subtype: 'number', + default: '', + placeholder: '', + help_text: '', + min_length: 0, + max_length: 0, + data_source: '', + options: [], + }; + const result = checkDialogElementForError(elem, ''); + expect(result).toEqual({ + id: 'interactive_dialog.error.required', + defaultMessage: 'This field is required.', + }); + }); + + test('returns too short error for text shorter than min_length', () => { + const elem: DialogElement = { + name: 'field1', + type: 'text', + min_length: 5, + display_name: '', + subtype: 'number', + default: '', + placeholder: '', + help_text: '', + optional: false, + max_length: 0, + data_source: '', + options: [], + }; + const result = checkDialogElementForError(elem, '123'); + expect(result).toEqual({ + id: 'interactive_dialog.error.too_short', + defaultMessage: 'Minimum input length is {minLength}.', + values: {minLength: 5}, + }); + }); + + test('returns bad email error for invalid email', () => { + const elem: DialogElement = { + name: 'field1', + type: 'text', + subtype: 'email', + display_name: '', + default: '', + placeholder: '', + help_text: '', + optional: false, + min_length: 0, + max_length: 0, + data_source: '', + options: [], + }; + const result = checkDialogElementForError(elem, 'invalidemail'); + expect(result).toEqual({ + id: 'interactive_dialog.error.bad_email', + defaultMessage: 'Must be a valid email address.', + }); + }); + + test('returns bad number error for invalid number', () => { + const elem: DialogElement = { + name: 'field1', + type: 'text', + subtype: 'number', + display_name: '', + default: '', + placeholder: '', + help_text: '', + optional: false, + min_length: 0, + max_length: 0, + data_source: '', + options: [], + }; + const result = checkDialogElementForError(elem, 'notanumber'); + expect(result).toEqual({ + id: 'interactive_dialog.error.bad_number', + defaultMessage: 'Must be a number.', + }); + }); + + test('returns bad URL error for invalid URL', () => { + const elem: DialogElement = { + name: 'field1', + type: 'text', + subtype: 'url', + display_name: '', + default: '', + placeholder: '', + help_text: '', + optional: false, + min_length: 0, + max_length: 0, + data_source: '', + options: [], + }; + const result = checkDialogElementForError(elem, 'invalidurl'); + expect(result).toEqual({ + id: 'interactive_dialog.error.bad_url', + defaultMessage: 'URL must include http:// or https://.', + }); + }); + + test('returns invalid option error for invalid radio option', () => { + const elem: DialogElement = { + name: 'field1', + type: 'radio', + options: [{ + value: 'option1', + text: '', + }, { + value: 'option2', + text: '', + }], + display_name: '', + subtype: 'number', + default: '', + placeholder: '', + help_text: '', + optional: false, + min_length: 0, + max_length: 0, + data_source: '', + }; + const result = checkDialogElementForError(elem, 'invalidoption'); + expect(result).toEqual({ + id: 'interactive_dialog.error.invalid_option', + defaultMessage: 'Must be a valid option', + }); + }); + + test('returns null for valid inputs', () => { + const elemText: DialogElement = { + name: 'field1', + type: 'text', + min_length: 3, + display_name: '', + subtype: 'password', + default: '', + placeholder: '', + help_text: '', + optional: false, + max_length: 0, + data_source: '', + options: [], + }; + const elemEmail: DialogElement = { + name: 'field2', + type: 'text', + subtype: 'email', + display_name: '', + default: '', + placeholder: '', + help_text: '', + optional: false, + min_length: 0, + max_length: 0, + data_source: '', + options: [], + }; + const elemNumber: DialogElement = { + name: 'field3', + type: 'text', + subtype: 'number', + display_name: '', + default: '', + placeholder: '', + help_text: '', + optional: false, + min_length: 0, + max_length: 0, + data_source: '', + options: [], + }; + const elemURL: DialogElement = { + name: 'field4', + type: 'text', + subtype: 'url', + display_name: '', + default: '', + placeholder: '', + help_text: '', + optional: false, + min_length: 0, + max_length: 0, + data_source: '', + options: [], + }; + const elemRadio: DialogElement = { + name: 'field5', + type: 'radio', + options: [{ + value: 'option1', + text: '', + }, { + value: 'option2', + text: '', + }], + display_name: '', + subtype: 'number', + default: '', + placeholder: '', + help_text: '', + optional: false, + min_length: 0, + max_length: 0, + data_source: '', + }; + + expect(checkDialogElementForError(elemText, 'valid')).toBeNull(); + expect(checkDialogElementForError(elemEmail, 'email@example.com')).toBeNull(); + expect(checkDialogElementForError(elemNumber, '123')).toBeNull(); + expect(checkDialogElementForError(elemURL, 'http://example.com')).toBeNull(); + expect(checkDialogElementForError(elemRadio, 'option1')).toBeNull(); + }); +}); + +describe('checkIfErrorsMatchElements', () => { + test('returns false if no dialog elements', () => { + const errors = {field1: 'error'}; + expect(checkIfErrorsMatchElements(errors)).toBe(false); + }); + + test('returns false if no dialog errprs', () => { + expect(checkIfErrorsMatchElements()).toBe(false); + }); + + test('returns true if errors match elements', () => { + const elements: DialogElement[] = [{ + name: 'field1', + type: 'text', + display_name: '', + subtype: 'number', + default: '', + placeholder: '', + help_text: '', + optional: false, + min_length: 0, + max_length: 0, + data_source: '', + options: [], + }]; + const errors = {field1: 'error'}; + expect(checkIfErrorsMatchElements(errors, elements)).toBe(true); + }); + + test('returns false if errors do not match elements', () => { + const elements: DialogElement[] = [{ + name: 'field1', + type: 'text', + display_name: '', + subtype: 'number', + default: '', + placeholder: '', + help_text: '', + optional: false, + min_length: 0, + max_length: 0, + data_source: '', + options: [], + }]; + const errors = {field2: 'error'}; + expect(checkIfErrorsMatchElements(errors, elements)).toBe(false); + }); + + test('returns false if errors and elements are empty', () => { + expect(checkIfErrorsMatchElements({}, [])).toBe(false); + }); +}); + +describe('selectKeyboardType', () => { + test('returns email-address for email subtype', () => { + expect(selectKeyboardType('email')).toBe('email-address'); + }); + + test('returns numeric for number subtype', () => { + expect(selectKeyboardType('number')).toBe('numeric'); + }); + + test('returns phone-pad for tel subtype', () => { + expect(selectKeyboardType('tel')).toBe('phone-pad'); + }); + + test('returns url for url subtype', () => { + expect(selectKeyboardType('url')).toBe('url'); + }); + + test('returns default for undefined subtype', () => { + expect(selectKeyboardType()).toBe('default'); + }); + + test('returns default for unrecognized subtype', () => { + expect(selectKeyboardType('unrecognized')).toBe('default'); + }); +}); diff --git a/app/utils/key_mirror.test.ts b/app/utils/key_mirror.test.ts new file mode 100644 index 00000000000..323049fdf2b --- /dev/null +++ b/app/utils/key_mirror.test.ts @@ -0,0 +1,28 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import keyMirror from './key_mirror'; + +describe('keyMirror', () => { + test('creates an object with keys mirrored as values', () => { + const input = {key1: null, key2: null, key3: null}; + const expectedOutput = {key1: 'key1', key2: 'key2', key3: 'key3'}; + expect(keyMirror(input)).toEqual(expectedOutput); + }); + + test('throws an error if argument is not an object', () => { + // @ts-expect-error null will complain by TS + expect(() => keyMirror(null)).toThrow('keyMirror(...): Argument must be an object.'); + expect(() => keyMirror([])).toThrow('keyMirror(...): Argument must be an object.'); + expect(() => keyMirror('string')).toThrow('keyMirror(...): Argument must be an object.'); + expect(() => keyMirror(42)).toThrow('keyMirror(...): Argument must be an object.'); + expect(() => keyMirror(true)).toThrow('keyMirror(...): Argument must be an object.'); + }); + + test('ignores properties from the prototype chain', () => { + const input = Object.create({inheritedKey: null}); + input.ownKey = null; + const expectedOutput = {ownKey: 'ownKey'}; + expect(keyMirror(input)).toEqual(expectedOutput); + }); +}); diff --git a/app/utils/log.test.ts b/app/utils/log.test.ts new file mode 100644 index 00000000000..252c520dbcb --- /dev/null +++ b/app/utils/log.test.ts @@ -0,0 +1,79 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import keyMirror from '@utils/key_mirror'; + +import {logError, logWarning, logInfo, logDebug} from './log'; + +// Mock Sentry +jest.mock('@sentry/react-native', () => ({ + addBreadcrumb: jest.fn(), +})); + +// Mock console methods +const originalConsole = global.console; + +// @ts-expect-error global not in TS def +global.console = { + error: jest.fn(), + warn: jest.fn(), + log: jest.fn(), + debug: jest.fn(), +}; + +describe('Logging functions', () => { + const Sentry = require('@sentry/react-native'); + const SentryLevels = keyMirror({debug: null, info: null, warning: null, error: null}); + + afterEach(() => { + jest.clearAllMocks(); + }); + + afterAll(() => { + global.console = originalConsole; + }); + + test('logError logs error and adds breadcrumb', () => { + const args = ['Error message']; + logError(...args); + expect(console.error).toHaveBeenCalledWith(...args); + expect(Sentry.addBreadcrumb).toHaveBeenCalledWith({ + level: SentryLevels.error, + message: args.join(','), + type: 'console-log', + }); + }); + + test('logWarning logs warning and adds breadcrumb', () => { + const args = ['Warning message']; + logWarning(...args); + expect(console.warn).toHaveBeenCalledWith(...args); + expect(Sentry.addBreadcrumb).toHaveBeenCalledWith({ + level: SentryLevels.warning, + message: args.join(','), + type: 'console-log', + }); + }); + + test('logInfo logs info and adds breadcrumb', () => { + const args = ['Info message']; + logInfo(...args); + expect(console.log).toHaveBeenCalledWith(...args); + expect(Sentry.addBreadcrumb).toHaveBeenCalledWith({ + level: SentryLevels.info, + message: args.join(','), + type: 'console-log', + }); + }); + + test('logDebug logs debug and adds breadcrumb', () => { + const args = ['Debug message']; + logDebug(...args); + expect(console.debug).toHaveBeenCalledWith(...args); + expect(Sentry.addBreadcrumb).toHaveBeenCalledWith({ + level: SentryLevels.debug, + message: args.join(','), + type: 'console-log', + }); + }); +}); diff --git a/app/utils/markdown/index.test.ts b/app/utils/markdown/index.test.ts new file mode 100644 index 00000000000..63f28685162 --- /dev/null +++ b/app/utils/markdown/index.test.ts @@ -0,0 +1,203 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Platform, type TextStyle} from 'react-native'; + +import {Preferences} from '@constants'; + +import { + getCodeFont, + getMarkdownTextStyles, + getMarkdownBlockStyles, + getHighlightLanguageFromNameOrAlias, + getHighlightLanguageName, + escapeRegex, + getMarkdownImageSize, + computeTextStyle, + parseSearchTerms, + convertSearchTermToRegex, +} from './index'; + +jest.mock('@utils/images', () => ({ + getViewPortWidth: jest.fn(), +})); + +jest.mock('@utils/log', () => ({ + logError: jest.fn(), +})); + +describe('Utility functions', () => { + describe('getCodeFont', () => { + it('should return the correct font for iOS', () => { + Platform.OS = 'ios'; + expect(getCodeFont()).toBe('Menlo'); + }); + + it('should return the correct font for Android', () => { + Platform.OS = 'android'; + expect(getCodeFont()).toBe('monospace'); + }); + }); + + describe('getMarkdownTextStyles', () => { + it('should return correct text styles', () => { + const styles = getMarkdownTextStyles(Preferences.THEMES.denim); + expect(styles).toHaveProperty('emph'); + expect(styles).toHaveProperty('strong'); + expect(styles).toHaveProperty('del'); + expect(styles).toHaveProperty('link'); + expect(styles).toHaveProperty('heading1'); + expect(styles).toHaveProperty('code'); + expect(styles).toHaveProperty('mention'); + expect(styles).toHaveProperty('error'); + expect(styles).toHaveProperty('table_header_row'); + expect(styles).toHaveProperty('mention_highlight'); + }); + }); + + describe('getMarkdownBlockStyles', () => { + it('should return correct block styles', () => { + const styles = getMarkdownBlockStyles(Preferences.THEMES.denim); + expect(styles).toHaveProperty('adjacentParagraph'); + expect(styles).toHaveProperty('horizontalRule'); + expect(styles).toHaveProperty('quoteBlockIcon'); + }); + }); + + describe('getHighlightLanguageFromNameOrAlias', () => { + it('should return correct language name or alias', () => { + expect(getHighlightLanguageFromNameOrAlias('javascript')).toBe('javascript'); + expect(getHighlightLanguageFromNameOrAlias('js')).toBe('javascript'); + expect(getHighlightLanguageFromNameOrAlias('unknown')).toBe(''); + }); + }); + + describe('getHighlightLanguageName', () => { + it('should return correct language name', () => { + expect(getHighlightLanguageName('javascript')).toBe('JavaScript'); + expect(getHighlightLanguageName('unknown')).toBe(''); + }); + }); + + describe('escapeRegex', () => { + it('should escape special regex characters', () => { + expect(escapeRegex('hello.*')).toBe('hello\\.\\*'); + }); + }); + + describe('getMarkdownImageSize', () => { + it('should return correct size for sourceSize', () => { + const size = getMarkdownImageSize(false, false, {width: 100, height: 200}); + expect(size).toEqual({width: 100, height: 200}); + }); + + it('should return correct size for sourceSize without height', () => { + const size = getMarkdownImageSize(false, false, {width: 100}); + expect(size).toEqual({width: 100, height: 100}); + }); + + it('should return correct size for sourceSize without height and known size', () => { + const size = getMarkdownImageSize(false, false, {width: 100}, {width: 100, height: 200}); + expect(size).toEqual({width: 100, height: 200}); + }); + + it('should return correct size for sourceSize height height and known size', () => { + const size = getMarkdownImageSize(false, false, {height: 100}, {width: 100, height: 200}); + expect(size).toEqual({width: 50, height: 100}); + }); + + it('should return correct size for knownSize', () => { + const size = getMarkdownImageSize(false, false, undefined, {width: 100, height: 200}); + expect(size).toEqual({width: 100, height: 200}); + }); + + it('should return correct size when no metadata and source size is not specified', () => { + const size = getMarkdownImageSize(false, false, undefined, undefined, 150, 250); + expect(size).toEqual({width: 150, height: 250}); + }); + }); + + describe('computeTextStyle', () => { + const textStyles: { [key: string]: TextStyle } = { + bold: {fontWeight: 'bold'}, + italic: {fontStyle: 'italic'}, + underline: {textDecorationLine: 'underline'}, + }; + + const baseStyle: TextStyle = {color: 'black'}; + + it('should return base style if context is empty', () => { + expect(computeTextStyle(textStyles, baseStyle, [])).toEqual(baseStyle); + }); + + it('should return base style if context has no matching styles', () => { + expect(computeTextStyle(textStyles, baseStyle, ['unknown'])).toEqual(baseStyle); + }); + + it('should apply a single context style', () => { + expect(computeTextStyle(textStyles, baseStyle, ['bold'])).toEqual([baseStyle, textStyles.bold]); + }); + + it('should apply multiple context styles', () => { + expect(computeTextStyle(textStyles, baseStyle, ['bold', 'italic'])).toEqual([baseStyle, textStyles.bold, textStyles.italic]); + }); + + it('should ignore undefined styles', () => { + expect(computeTextStyle(textStyles, baseStyle, ['bold', 'unknown'])).toEqual([baseStyle, textStyles.bold]); + }); + + it('should handle multiple undefined styles', () => { + expect(computeTextStyle(textStyles, baseStyle, ['unknown1', 'unknown2'])).toEqual(baseStyle); + }); + }); + + describe('parseSearchTerms', () => { + it('should capture quoted strings', () => { + expect(parseSearchTerms('"hello world"')).toEqual(['hello world']); + }); + + it('should ignore search flags', () => { + expect(parseSearchTerms('in:channel before:2021-01-01')).toEqual([]); + }); + + it('should capture @ mentions', () => { + expect(parseSearchTerms('@username')).toEqual(['username']); + }); + + it('should capture plain text up to the next quote or search flag', () => { + expect(parseSearchTerms('plain text "quoted text"')).toEqual(['plain', 'text', 'quoted text']); + }); + + it('should split plain text into words', () => { + expect(parseSearchTerms('this is a test')).toEqual(['this', 'is', 'a', 'test']); + }); + + it('should handle a mix of all cases', () => { + const searchTerm = 'in:channel @username "quoted text" plain text'; + const expected = ['username', 'quoted text', 'plain', 'text']; + expect(parseSearchTerms(searchTerm)).toEqual(expected); + }); + }); + + describe('convertSearchTermToRegex', () => { + it('should create regex for CJK characters', () => { + const result = convertSearchTermToRegex('你好'); + expect(result.pattern).toEqual(/()(你好)/gi); + }); + + it('should create regex for wildcard at the end', () => { + const result = convertSearchTermToRegex('hello*'); + expect(result.pattern).toEqual(/\b()(hello)/gi); + }); + + it('should create regex for mentions and hashtags', () => { + const result = convertSearchTermToRegex('@user'); + expect(result.pattern).toEqual(/(\W|^)(@user)\b/gi); + }); + + it('should create regex for plain text', () => { + const result = convertSearchTermToRegex('hello'); + expect(result.pattern).toEqual(/\b()(hello)\b/gi); + }); + }); +}); diff --git a/app/utils/markdown/index.ts b/app/utils/markdown/index.ts index 9611c3f6ce6..95824ffcd24 100644 --- a/app/utils/markdown/index.ts +++ b/app/utils/markdown/index.ts @@ -331,10 +331,11 @@ export function parseSearchTerms(searchTerm: string): string[] | undefined { } // remove punctuation from each term - terms = terms.map((term) => { - term.replace(puncStart, ''); + terms = terms.map((t) => { + let term = t; + term = term.replace(puncStart, ''); if (term.charAt(term.length - 1) !== '*') { - term.replace(puncEnd, ''); + term = term.replace(puncEnd, ''); } return term; }); diff --git a/app/utils/mattermost_managed.test.ts b/app/utils/mattermost_managed.test.ts new file mode 100644 index 00000000000..0a6c41a0c33 --- /dev/null +++ b/app/utils/mattermost_managed.test.ts @@ -0,0 +1,102 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import RNUtils from '@mattermost/rnutils'; +import {Platform} from 'react-native'; + +import { + getIOSAppGroupDetails, + deleteIOSDatabase, + renameIOSDatabase, + deleteEntitiesFile, +} from './mattermost_managed'; + +jest.mock('@mattermost/rnutils', () => ({ + getConstants: jest.fn(), + deleteDatabaseDirectory: jest.fn(), + renameDatabase: jest.fn(), + deleteEntitiesFile: jest.fn(), +})); + +describe('iOS Utilities', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('getIOSAppGroupDetails', () => { + test('retrieves iOS AppGroup details correctly', () => { + const constantsMock = { + appGroupIdentifier: 'group.com.example.app', + appGroupSharedDirectory: {sharedDirectory: '/shared', databasePath: '/shared/database'}, + }; + + //@ts-expect-error mockReturnValue + RNUtils.getConstants.mockReturnValue(constantsMock); + + const details = getIOSAppGroupDetails(); + + expect(details).toEqual({ + appGroupIdentifier: 'group.com.example.app', + appGroupSharedDirectory: '/shared', + appGroupDatabase: '/shared/database', + }); + expect(RNUtils.getConstants).toHaveBeenCalled(); + }); + }); + + describe('deleteIOSDatabase', () => { + test('deletes iOS database with given parameters', async () => { + //@ts-expect-error mockReturnValue + const deleteMock = RNUtils.deleteDatabaseDirectory.mockResolvedValue(true); + + const result = await deleteIOSDatabase({databaseName: 'test.db', shouldRemoveDirectory: true}); + + expect(deleteMock).toHaveBeenCalledWith('test.db', true); + expect(result).toBe(true); + }); + + test('deletes iOS database with default parameters', async () => { + //@ts-expect-error mockReturnValue + const deleteMock = RNUtils.deleteDatabaseDirectory.mockResolvedValue(true); + + const result = await deleteIOSDatabase({}); + + expect(deleteMock).toHaveBeenCalledWith('', false); + expect(result).toBe(true); + }); + }); + + describe('renameIOSDatabase', () => { + test('renames iOS database with given parameters', () => { + //@ts-expect-error mockReturnValue + const renameMock = RNUtils.renameDatabase.mockResolvedValue(true); + + const result = renameIOSDatabase('old.db', 'new.db'); + + expect(renameMock).toHaveBeenCalledWith('old.db', 'new.db'); + expect(result).resolves.toBe(true); + }); + }); + + describe('deleteEntitiesFile', () => { + test('deletes entities file on iOS', () => { + Platform.OS = 'ios'; + + //@ts-expect-error mockReturnValue + const deleteMock = RNUtils.deleteEntitiesFile.mockResolvedValue(true); + + const result = deleteEntitiesFile(); + + expect(deleteMock).toHaveBeenCalled(); + expect(result).resolves.toBe(true); + }); + + test('resolves true on non-iOS platforms', () => { + Platform.OS = 'android'; + + const result = deleteEntitiesFile(); + + expect(result).resolves.toBe(true); + }); + }); +}); diff --git a/app/utils/mattermost_managed.ts b/app/utils/mattermost_managed.ts index 04f3af1e812..eb8f4348519 100644 --- a/app/utils/mattermost_managed.ts +++ b/app/utils/mattermost_managed.ts @@ -1,9 +1,8 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import {NativeModules, Platform} from 'react-native'; - -const {MattermostManaged} = NativeModules; +import RNUtils from '@mattermost/rnutils'; +import {Platform} from 'react-native'; type IOSDeleteDatabase = { databaseName?: string; shouldRemoveDirectory?: boolean } type IOSAppGroupDetails = { appGroupIdentifier: string; appGroupSharedDirectory: string; appGroupDatabase: string } @@ -16,7 +15,7 @@ export const getIOSAppGroupDetails = (): IOSAppGroupDetails => { const { appGroupIdentifier, appGroupSharedDirectory: {sharedDirectory, databasePath}, - } = MattermostManaged.getConstants(); + } = RNUtils.getConstants(); const appGroup = { appGroupIdentifier, @@ -37,11 +36,11 @@ export const getIOSAppGroupDetails = (): IOSAppGroupDetails => { * MattermostManaged.deleteDatabaseDirectory(databaseName, shouldRemoveDirectory, (error: any, success: any) => { }); */ export const deleteIOSDatabase = async ({ - databaseName = undefined, + databaseName = '', shouldRemoveDirectory = false, }: IOSDeleteDatabase) => { // eslint-disable-next-line @typescript-eslint/no-unused-vars - return MattermostManaged.deleteDatabaseDirectory(databaseName, shouldRemoveDirectory, () => null); + return RNUtils.deleteDatabaseDirectory(databaseName, shouldRemoveDirectory); }; /** @@ -50,17 +49,13 @@ export const deleteIOSDatabase = async ({ * @param {string} to new database name */ export const renameIOSDatabase = (from: string, to: string) => { - MattermostManaged.renameDatabase(from, to, () => null); + return RNUtils.renameDatabase(from, to); }; -export const deleteEntititesFile = (callback?: (success: boolean) => void) => { +export const deleteEntitiesFile = () => { if (Platform.OS === 'ios') { - MattermostManaged.deleteEntititesFile((result: boolean) => { - if (callback) { - callback(result); - } - }); - } else if (callback) { - callback(true); + return RNUtils.deleteEntitiesFile(); } + + return Promise.resolve(true); }; diff --git a/app/utils/message_attachment_colors.test.ts b/app/utils/message_attachment_colors.test.ts new file mode 100644 index 00000000000..3ee07e98404 --- /dev/null +++ b/app/utils/message_attachment_colors.test.ts @@ -0,0 +1,44 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Preferences} from '@constants'; + +import {getStatusColors} from './message_attachment_colors'; + +describe('getStatusColors', () => { + const mockTheme = Preferences.THEMES.denim; + + test('returns correct status colors based on theme', () => { + const expectedColors: Dictionary = { + good: '#00c100', + warning: '#dede01', + danger: '#d24b4e', + default: '#3f4350', + primary: '#1c58d9', + success: '#3db887', + }; + + const statusColors = getStatusColors(mockTheme); + expect(statusColors).toEqual(expectedColors); + }); + + test('returns the correct danger color from the theme', () => { + const statusColors = getStatusColors(mockTheme); + expect(statusColors.danger).toBe(mockTheme.errorTextColor); + }); + + test('returns the correct default color from the theme', () => { + const statusColors = getStatusColors(mockTheme); + expect(statusColors.default).toBe(mockTheme.centerChannelColor); + }); + + test('returns the correct primary color from the theme', () => { + const statusColors = getStatusColors(mockTheme); + expect(statusColors.primary).toBe(mockTheme.buttonBg); + }); + + test('returns the correct success color from the theme', () => { + const statusColors = getStatusColors(mockTheme); + expect(statusColors.success).toBe(mockTheme.onlineIndicator); + }); +}); diff --git a/app/utils/mix.test.ts b/app/utils/mix.test.ts new file mode 100644 index 00000000000..ad635a9c583 --- /dev/null +++ b/app/utils/mix.test.ts @@ -0,0 +1,63 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import mix from './mix'; + +describe('MixinBuilder', () => { + class BaseClass { + baseMethod() { + return 'base method'; + } + } + + const MixinA = (superclass: any) => class extends superclass { + mixinAMethod() { + return 'mixin A method'; + } + }; + + const MixinB = (superclass: any) => class extends superclass { + mixinBMethod() { + return 'mixin B method'; + } + }; + + test('applies mixins correctly', () => { + const MixedClass = mix(BaseClass).with(MixinA, MixinB); + const instance = new MixedClass(); + + expect(instance.baseMethod()).toBe('base method'); + + // @ts-expect-error mixin method not defined + expect(instance.mixinAMethod()).toBe('mixin A method'); + + // @ts-expect-error mixin method not defined + expect(instance.mixinBMethod()).toBe('mixin B method'); + }); + + test('applies a single mixin correctly', () => { + const MixedClass = mix(BaseClass).with(MixinA); + const instance = new MixedClass(); + + expect(instance.baseMethod()).toBe('base method'); + + // @ts-expect-error mixin method not defined + expect(instance.mixinAMethod()).toBe('mixin A method'); + + // @ts-expect-error mixin method not defined + expect(() => instance.mixinBMethod()).toThrow(TypeError); + }); + + test('returns the superclass if no mixins are provided', () => { + const MixedClass = mix(BaseClass).with(); + const instance = new MixedClass(); + + expect(instance.baseMethod()).toBe('base method'); + + // @ts-expect-error mixin method not defined + expect(() => instance.mixinAMethod()).toThrow(TypeError); + + // @ts-expect-error mixin method not defined + expect(() => instance.mixinBMethod()).toThrow(TypeError); + }); +}); diff --git a/app/utils/navigation/index.test.ts b/app/utils/navigation/index.test.ts new file mode 100644 index 00000000000..800e1b5bbef --- /dev/null +++ b/app/utils/navigation/index.test.ts @@ -0,0 +1,80 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {createIntl} from 'react-intl'; +import {Alert} from 'react-native'; +import {Navigation} from 'react-native-navigation'; + +import {ServerErrors} from '@constants'; +import {DEFAULT_LOCALE, getTranslations} from '@i18n'; + +import {mergeNavigationOptions, alertTeamRemove, alertChannelRemove, alertChannelArchived, alertTeamAddError} from '.'; + +describe('Navigation utils', () => { + const componentId = 'component-id'; + const options = {topBar: {title: {text: 'Test'}}}; + const displayName = 'Test Display Name'; + const serverError = {server_error_id: ServerErrors.TEAM_MEMBERSHIP_DENIAL_ERROR_ID}; + const genericServerError = {server_error_id: 'api.some_server_error.id', message: 'Generic error message'}; + const intl = createIntl({locale: DEFAULT_LOCALE, messages: getTranslations(DEFAULT_LOCALE)}); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should call Navigation.mergeOptions with the correct arguments', () => { + mergeNavigationOptions(componentId, options); + expect(Navigation.mergeOptions).toHaveBeenCalledWith(componentId, options); + }); + + it('should display alert when a user is removed from a team', () => { + alertTeamRemove(displayName, intl); + expect(Alert.alert).toHaveBeenCalledWith( + 'Removed from team', + 'You have been removed from team Test Display Name.', + [{style: 'cancel', text: 'OK'}], + ); + }); + + it('should display alert when a user is removed from a channel', () => { + alertChannelRemove(displayName, intl); + expect(Alert.alert).toHaveBeenCalledWith( + 'Removed from channel', + 'You have been removed from channel Test Display Name.', + [{style: 'cancel', text: 'OK'}], + ); + }); + + it('should display alert when a channel is archived', () => { + alertChannelArchived(displayName, intl); + expect(Alert.alert).toHaveBeenCalledWith( + 'Archived channel', + 'The channel Test Display Name has been archived.', + [{style: 'cancel', text: 'OK'}], + ); + }); + + it('should display alert for team add error with default message', () => { + alertTeamAddError({}, intl); + expect(Alert.alert).toHaveBeenCalledWith( + 'Error joining a team', + 'There has been an error joining the team', + ); + }); + + it('should display alert for team add error with specific server error message', () => { + alertTeamAddError(serverError, intl); + expect(Alert.alert).toHaveBeenCalledWith( + 'Error joining a team', + 'You need to be a member of a linked group to join this team.', + ); + }); + + it('should display alert for team add error with generic error message', () => { + alertTeamAddError(genericServerError, intl); + expect(Alert.alert).toHaveBeenCalledWith( + 'Error joining a team', + 'Generic error message', + ); + }); +}); diff --git a/app/utils/notification/index.test.ts b/app/utils/notification/index.test.ts new file mode 100644 index 00000000000..c7c36887cf8 --- /dev/null +++ b/app/utils/notification/index.test.ts @@ -0,0 +1,146 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import moment from 'moment-timezone'; +import {createIntl} from 'react-intl'; +import {Alert, DeviceEventEmitter} from 'react-native'; +import {Notifications} from 'react-native-notifications'; + +import {Events} from '@constants'; +import {DEFAULT_LOCALE, getTranslations} from '@i18n'; +import {popToRoot} from '@screens/navigation'; + +import { + convertToNotificationData, + notificationError, + emitNotificationError, + scheduleExpiredNotification, +} from '.'; + +describe('Notification Utils', () => { + const intl = createIntl({locale: DEFAULT_LOCALE, messages: getTranslations(DEFAULT_LOCALE)}); + const notification = { + identifier: 'id', + payload: { + ack_id: 'ack_id', + channel_id: 'channel_id', + channel_name: 'channel_name', + from_webhook: true, + message: 'Test message', + override_icon_url: 'icon_url', + override_username: 'username', + post_id: 'post_id', + root_id: 'root_id', + sender_id: 'sender_id', + sender_name: 'sender_name', + server_id: 'server_id', + server_url: 'server_url', + team_id: 'team_id', + type: 'message', + sub_type: 'sub_type', + use_user_icon: true, + version: '1.0', + is_crt_enabled: 'true', + data: {}, + }, + body: 'body', + }; + + const session = { + expires_at: moment().add(10, 'hours').valueOf(), + }; + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('convertToNotificationData', () => { + it('should convert notification with payload to NotificationWithData', () => { + const result = convertToNotificationData(notification as any, true); + const not = {...notification}; + Reflect.deleteProperty(not.payload, 'is_crt_enabled'); + expect(result).toEqual({ + ...not, + payload: { + ...not.payload, + identifier: 'id', + isCRTEnabled: true, + message: 'Test message', + }, + userInteraction: true, + foreground: false, + }); + }); + + it('should return the original notification if no payload is present', () => { + const result = convertToNotificationData({identifier: 'id'} as any, false); + expect(result).toEqual({identifier: 'id'}); + }); + }); + + describe('notificationError', () => { + it('should display alert and popToRoot for Channel type', () => { + notificationError(intl, 'Channel'); + expect(Alert.alert).toHaveBeenCalledWith( + 'Message not found', + 'This message belongs to a channel where you are not a member.', + ); + expect(popToRoot).toHaveBeenCalled(); + }); + + it('should display alert and popToRoot for Team type', () => { + notificationError(intl, 'Team'); + expect(Alert.alert).toHaveBeenCalledWith( + 'Message not found', + 'This message belongs to a team where you are not a member.', + ); + expect(popToRoot).toHaveBeenCalled(); + }); + + it('should display alert and popToRoot for Post type', () => { + notificationError(intl, 'Post'); + expect(Alert.alert).toHaveBeenCalledWith( + 'Message not found', + 'The message has not been found.', + ); + expect(popToRoot).toHaveBeenCalled(); + }); + + it('should display alert and popToRoot for Connection type', () => { + notificationError(intl, 'Connection'); + expect(Alert.alert).toHaveBeenCalledWith( + 'Message not found', + 'The server is unreachable and it was not possible to retrieve the specific message information for the notification.', + ); + expect(popToRoot).toHaveBeenCalled(); + }); + }); + + describe('emitNotificationError', () => { + it('should emit notification error after 500ms', (done) => { + const spyEmit = jest.spyOn(DeviceEventEmitter, 'emit'); + emitNotificationError('Channel'); + setTimeout(() => { + expect(spyEmit).toHaveBeenCalledWith(Events.NOTIFICATION_ERROR, 'Channel'); + done(); + }, 600); // wait a little longer than 500ms to ensure the timeout has executed + }); + }); + + describe('scheduleExpiredNotification', () => { + it('should schedule a notification for session expiration with hours', () => { + const result = scheduleExpiredNotification('server_url', session as any, 'ServerName', 'en'); + expect(Notifications.postLocalNotification).toHaveBeenCalledWith(expect.objectContaining({ + fireDate: new Date(session.expires_at).toISOString(), + body: 'Please log in to continue receiving notifications. Sessions for ServerName are configured to expire every 10 hours.', + title: 'Session Expired', + })); + expect(result).toBeDefined(); + }); + + it('should return 0 if expiresAt is not defined', () => { + const result = scheduleExpiredNotification('server_url', {} as any, 'ServerName', 'en'); + expect(result).toBe(0); + }); + }); +}); diff --git a/app/utils/notification/index.ts b/app/utils/notification/index.ts index 81309510dc4..275d90d9098 100644 --- a/app/utils/notification/index.ts +++ b/app/utils/notification/index.ts @@ -2,14 +2,15 @@ // See LICENSE.txt for license information. import moment from 'moment-timezone'; -import {createIntl, type IntlShape} from 'react-intl'; +import {type IntlShape} from 'react-intl'; import {Alert, DeviceEventEmitter} from 'react-native'; import {Events} from '@constants'; import {NOTIFICATION_TYPE} from '@constants/push_notification'; -import {DEFAULT_LOCALE, getTranslations} from '@i18n'; +import {DEFAULT_LOCALE} from '@i18n'; import PushNotifications from '@init/push_notifications'; import {popToRoot} from '@screens/navigation'; +import {getIntlShape} from '@utils/general'; export const convertToNotificationData = (notification: Notification, tapped = true): NotificationWithData => { if (!notification.payload) { @@ -95,7 +96,7 @@ export const scheduleExpiredNotification = (serverUrl: string, session: Session, const expiresInHours = Math.ceil(Math.abs(moment.duration(moment().diff(moment(expiresAt))).asHours())); const expiresInDays = Math.floor(expiresInHours / 24); // Calculate expiresInDays const remainingHours = expiresInHours % 24; // Calculate remaining hours - const intl = createIntl({locale, messages: getTranslations(locale)}); + const intl = getIntlShape(locale); let body = ''; if (expiresInDays === 0) { body = intl.formatMessage({ diff --git a/app/utils/opengraph.test.ts b/app/utils/opengraph.test.ts new file mode 100644 index 00000000000..6816dd9cb46 --- /dev/null +++ b/app/utils/opengraph.test.ts @@ -0,0 +1,64 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {getDistanceBW2Points, getNearestPoint} from './opengraph'; + +describe('Utility Functions', () => { + describe('getDistanceBW2Points', () => { + test('calculates the distance correctly', () => { + const point1 = {x: 1, y: 1}; + const point2 = {x: 4, y: 5}; + const distance = getDistanceBW2Points(point1, point2); + expect(distance).toBeCloseTo(5); + }); + + test('calculates the distance correctly with custom attributes', () => { + const point1 = {a: 1, b: 1}; + const point2 = {a: 4, b: 5}; + const distance = getDistanceBW2Points(point1, point2, 'a', 'b'); + expect(distance).toBeCloseTo(5); + }); + }); + + describe('getNearestPoint', () => { + test('finds the nearest point correctly', () => { + const pivotPoint = {height: 0, width: 0}; + const points = [ + {x: 1, y: 1}, + {x: 2, y: 2}, + {x: -1, y: -1}, + ] as never[]; + const nearestPoint = getNearestPoint(pivotPoint, points); + expect(nearestPoint).toEqual({x: 1, y: 1}); + }); + + test('returns an empty object if points array is empty', () => { + const pivotPoint = {height: 0, width: 0}; + const points: never[] = []; + const nearestPoint = getNearestPoint(pivotPoint, points); + expect(nearestPoint).toEqual({}); + }); + + test('finds the nearest point with custom attributes', () => { + const pivotPoint = {height: 0, width: 0}; + const points = [ + {a: 1, b: 1}, + {a: 2, b: 2}, + {a: -1, b: -1}, + ] as never[]; + const nearestPoint = getNearestPoint(pivotPoint, points, 'a', 'b'); + expect(nearestPoint).toEqual({a: 1, b: 1}); + }); + + test('updates nearest point based on distance comparison', () => { + const pivotPoint = {height: 0, width: 0}; + const points = [ + {x: 5, y: 5}, + {x: 2, y: 2}, + {x: 3, y: 3}, + ] as never[]; + const nearestPoint = getNearestPoint(pivotPoint, points); + expect(nearestPoint).toEqual({x: 2, y: 2}); + }); + }); +}); diff --git a/app/utils/opengraph.ts b/app/utils/opengraph.ts index 97f8a7bbd86..19fa1c6e288 100644 --- a/app/utils/opengraph.ts +++ b/app/utils/opengraph.ts @@ -1,11 +1,53 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {decode} from 'html-entities'; +import htmlParser from 'node-html-parser'; +import urlParse from 'url-parse'; + export type BestImage = { secure_url?: string; url?: string; }; +export type OpenGraph = { + link: string; + title?: string; + imageURL?: string; + favIcon?: string; + error?: any; +} + +type LinkRelIcon = { + href: string; + sizes?: string; +} + +const metaTags: Record = { + title: 'title', + description: 'description', + ogUrl: 'og:url', + ogType: 'og:type', + ogTitle: 'og:title', + ogDescription: 'og:description', + ogImage: 'og:image', + ogVideo: 'og:video', + ogVideoType: 'og:video:type', + ogVideoWidth: 'og:video:width', + ogVideoHeight: 'og:video:height', + ogVideoUrl: 'og:video:url', + twitterPlayer: 'twitter:player', + twitterPlayerWidth: 'twitter:player:width', + twitterPlayerHeight: 'twitter:player:height', + twitterPlayerStream: 'twitter:player:stream', + twitterCard: 'twitter:card', + twitterDomain: 'twitter:domain', + twitterUrl: 'twitter:url', + twitterTitle: 'twitter:title', + twitterDescription: 'twitter:description', + twitterImage: 'twitter:image', +}; + export function getDistanceBW2Points(point1: Record, point2: Record, xAttr = 'x', yAttr = 'y') { return Math.sqrt(Math.pow(point1[xAttr] - point2[xAttr], 2) + Math.pow(point1[yAttr] - point2[yAttr], 2)); } @@ -16,13 +58,133 @@ export function getDistanceBW2Points(point1: Record, point2: Record */ export function getNearestPoint(pivotPoint: {height: number; width: number}, points: never[], xAttr = 'x', yAttr = 'y') { let nearestPoint: Record = {}; + const pivot = {[xAttr]: pivotPoint.width, [yAttr]: pivotPoint.height}; for (const point of points) { if (typeof nearestPoint[xAttr] === 'undefined' || typeof nearestPoint[yAttr] === 'undefined') { nearestPoint = point; - } else if (getDistanceBW2Points(point, pivotPoint, xAttr, yAttr) < getDistanceBW2Points(nearestPoint, pivotPoint, xAttr, yAttr)) { + } else if (getDistanceBW2Points(point, pivot, xAttr, yAttr) < getDistanceBW2Points(nearestPoint, pivot, xAttr, yAttr)) { // Check for bestImage nearestPoint = point; } } return nearestPoint as BestImage; } + +const fetchRaw = async (url: string) => { + try { + const res = await fetch(url, { + headers: { + 'User-Agent': 'OpenGraph', + 'Cache-Control': 'no-cache', + Accept: '*/*', + Connection: 'keep-alive', + }, + }); + + if (!res.ok) { + return res; + } + + return (await res.text()) as any; + } catch (error: any) { + return {message: error.message}; + } +}; + +const getFavIcon = (url: string, html: string) => { + const getSize = (el: LinkRelIcon) => { + return (el.sizes && el.sizes[0] && parseInt(el.sizes[0], 10)) || 0; + }; + + const root = htmlParser.parse(html); + + const icons = (root.querySelectorAll('link')).reduce((r, e) => { + if (e.attributes.rel === 'icon' || e.attributes.rel === 'shortcut icon') { + const {href, sizes} = e.attributes; + r.push({href, sizes}); + } + return r; + }, []).sort((a, b) => { + return getSize(b) - getSize(a); + }); + + if (icons.length) { + const icon = icons[0].href; + let parsed = urlParse(icon); + if (!parsed.host) { + parsed = urlParse(url); + return `${parsed.protocol}//${parsed.host}${icon}`; + } + return icon; + } + const parsed = urlParse(url); + return `${parsed.protocol}//${parsed.host}/favicon.ico`; +}; + +export const fetchOpenGraph = async (url: string, includeFavIcon = false): Promise => { + const { + ogTitle, + ogImage, + } = metaTags; + + try { + const html = await fetchRaw(url); + if (html.message) { + throw Error(html.message); + } + + let siteTitle = ''; + + const tagTitle = html.match( + /]*>[\r\n\t\s]*([^<]+)[\r\n\t\s]*<\/title>/gim, + ); + siteTitle = tagTitle[0].replace( + /]*>[\r\n\t\s]*([^<]+)[\r\n\t\s]*<\/title>/gim, + '$1', + ); + + const og = []; + const metas: any = html.match(/]+>/gim); + + // There is no else statement + /* istanbul ignore else */ + if (metas) { + for (const m of metas) { + const meta = m.replace(/\s*\/?>$/, ' />'); + const zname = meta.replace(/[\s\S]*(property|name)\s*=\s*([\s\S]+)/, '$2'); + const name = (/^["']/).test(zname) ? zname.substr(1, zname.slice(1).indexOf(zname[0])) : zname.substr(0, zname.search(/[\s\t]/g)); + const valid = Boolean(Object.keys(metaTags).filter((key: string) => metaTags[key].toLowerCase() === name.toLowerCase()).length); + + // There is no else statement + /* istanbul ignore else */ + if (valid) { + const zcontent = meta.replace(/[\s\S]*(content)\s*=\s*([\s\S]+)/, '$2'); + const content = (/^["']/).test(zcontent) ? zcontent.substr(1, zcontent.slice(1).indexOf(zcontent[0])) : zcontent.substr(0, zcontent.search(/[\s\t]/g)); + og.push({name, value: content === 'undefined' ? null : content}); + } + } + } + + const result: OpenGraph = {link: url}; + const data = og.reduce( + (chain: any, meta: any) => ({...chain, [meta.name]: decode(meta.value)}), + {url}, + ); + + // Image + result.imageURL = data[ogImage] ? data[ogImage] : null; + result.favIcon = includeFavIcon ? getFavIcon(url, html) : undefined; + + // Title + data[ogTitle] = data[ogTitle] ? data[ogTitle] : siteTitle; + + result.title = data[ogTitle]; + + return result; + } catch (error: any) { + return { + link: url, + error, + }; + } +}; diff --git a/app/utils/permalink/index.test.ts b/app/utils/permalink/index.test.ts new file mode 100644 index 00000000000..add8265bddc --- /dev/null +++ b/app/utils/permalink/index.test.ts @@ -0,0 +1,84 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Keyboard, Platform} from 'react-native'; +import {OptionsModalPresentationStyle} from 'react-native-navigation'; + +import {dismissAllModals, showModalOverCurrentContext} from '@screens/navigation'; + +import {displayPermalink, closePermalink} from '.'; + +jest.mock('@screens/navigation', () => ({ + dismissAllModals: jest.fn(), + showModalOverCurrentContext: jest.fn(), +})); + +describe('permalinkUtils', () => { + const originalSelect = Platform.select; + + beforeAll(() => { + Platform.select = ({android, ios, default: dft}: any) => { + if (Platform.OS === 'android' && android) { + return android; + } else if (Platform.OS === 'ios' && ios) { + return ios; + } + + return dft; + }; + }); + + afterAll(() => { + Platform.select = originalSelect; + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('displayPermalink', () => { + it('should dismiss keyboard and show permalink modal', async () => { + const dismiss = jest.spyOn(Keyboard, 'dismiss'); + await displayPermalink('teamName', 'postId'); + expect(dismiss).toHaveBeenCalled(); + expect(showModalOverCurrentContext).toHaveBeenCalledWith( + 'Permalink', + {isPermalink: true, teamName: 'teamName', postId: 'postId'}, + { + modalPresentationStyle: OptionsModalPresentationStyle.overFullScreen, + layout: { + componentBackgroundColor: 'rgba(0,0,0,0.2)', + }, + }, + ); + }); + + it('should dismiss all modals if showingPermalink is true', async () => { + // Simulate showingPermalink being true + await displayPermalink('teamName', 'postId'); + await displayPermalink('teamName', 'postId'); + expect(dismissAllModals).toHaveBeenCalled(); + }); + + it('should handle platform specific options correctly', async () => { + await displayPermalink('teamName', 'postId'); + expect(showModalOverCurrentContext).toHaveBeenCalledWith( + 'Permalink', + {isPermalink: true, teamName: 'teamName', postId: 'postId'}, + { + modalPresentationStyle: OptionsModalPresentationStyle.overFullScreen, + layout: { + componentBackgroundColor: 'rgba(0,0,0,0.2)', + }, + }, + ); + }); + }); + + describe('closePermalink', () => { + it('should set showingPermalink to false', () => { + const showingPermalink = closePermalink(); + expect(showingPermalink).toBe(false); + }); + }); +}); diff --git a/app/utils/permalink/index.ts b/app/utils/permalink/index.ts index b52f1dba202..6af509fc3ed 100644 --- a/app/utils/permalink/index.ts +++ b/app/utils/permalink/index.ts @@ -39,4 +39,5 @@ export const displayPermalink = async (teamName: string, postId: string, openAsP export const closePermalink = () => { showingPermalink = false; + return showingPermalink; }; diff --git a/app/utils/post/index.test.ts b/app/utils/post/index.test.ts index 8fd8bd93c0e..463577f2bd4 100644 --- a/app/utils/post/index.test.ts +++ b/app/utils/post/index.test.ts @@ -1,52 +1,585 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import * as utils from './index'; +import {createIntl} from 'react-intl'; +import {Alert} from 'react-native'; + +import {getUsersCountFromMentions} from '@actions/local/post'; +import {General, Post} from '@constants'; +import {DEFAULT_LOCALE, getTranslations} from '@i18n'; +import {getUserById} from '@queries/servers/user'; +import {toMilliseconds} from '@utils/datetime'; + +import { + areConsecutivePosts, + isFromWebhook, + isEdited, + isPostEphemeral, + isPostFailed, + isPostPendingOrFailed, + isSystemMessage, + fromAutoResponder, + postUserDisplayName, + shouldIgnorePost, + processPostsFetched, + getLastFetchedAtFromPosts, + moreThan5minAgo, + hasSpecialMentions, + persistentNotificationsConfirmation, +} from '.'; + +import type PostModel from '@typings/database/models/servers/post'; +import type UserModel from '@typings/database/models/servers/user'; + +jest.mock('@actions/local/post', () => ({ + getUsersCountFromMentions: jest.fn(), +})); + +jest.mock('@queries/servers/user', () => ({ + getUserById: jest.fn(), +})); + +jest.mock('@database/manager', () => ({ + getServerDatabaseAndOperator: jest.fn().mockReturnValue({ + database: {}, + }), +})); describe('post utils', () => { - test.each([ - ['@here where is Jessica Hyde', true], - ['@all where is Jessica Hyde', true], - ['@channel where is Jessica Hyde', true], - - ['where is Jessica Hyde @here', true], - ['where is Jessica Hyde @all', true], - ['where is Jessica Hyde @channel', true], - - ['where is Jessica @here Hyde', true], - ['where is Jessica @all Hyde', true], - ['where is Jessica @channel Hyde', true], - - ['where is Jessica Hyde\n@here', true], - ['where is Jessica Hyde\n@all', true], - ['where is Jessica Hyde\n@channel', true], - - ['where is Jessica\n@here Hyde', true], - ['where is Jessica\n@all Hyde', true], - ['where is Jessica\n@channel Hyde', true], - - ['where is Jessica Hyde @her', false], - ['where is Jessica Hyde @al', false], - ['where is Jessica Hyde @chann', false], - - ['where is Jessica Hyde@here', false], - ['where is Jessica Hyde@all', false], - ['where is Jessica Hyde@channel', false], - - ['where is Jessica @hereHyde', false], - ['where is Jessica @allHyde', false], - ['where is Jessica @channelHyde', false], - - ['@herewhere is Jessica Hyde@here', false], - ['@allwhere is Jessica Hyde@all', false], - ['@channelwhere is Jessica Hyde@channel', false], - - ['where is Jessica Hyde here', false], - ['where is Jessica Hyde all', false], - ['where is Jessica Hyde channel', false], - - ['where is Jessica Hyde', false], - ])('hasSpecialMentions: %s => %s', (message, expected) => { - expect(utils.hasSpecialMentions(message)).toBe(expected); + describe('areConsecutivePosts', () => { + it('should return true for consecutive posts from the same user within the collapse timeout', () => { + const post = { + userId: 'user1', + createAt: 1000, + props: {}, + } as PostModel; + const previousPost = { + userId: 'user1', + createAt: 500, + props: {}, + } as PostModel; + + const result = areConsecutivePosts(post, previousPost); + expect(result).toBe(true); + }); + + it('should return false for posts from different users', () => { + const post = { + userId: 'user1', + createAt: 1000, + props: {}, + } as PostModel; + const previousPost = { + userId: 'user2', + createAt: 500, + props: {}, + } as PostModel; + + const result = areConsecutivePosts(post, previousPost); + expect(result).toBe(false); + }); + }); + + describe('isFromWebhook', () => { + it('should return true for posts from a webhook', () => { + const post = { + props: { + from_webhook: 'true', + }, + } as PostModel; + + const result = isFromWebhook(post); + expect(result).toBe(true); + }); + + it('should return false for posts not from a webhook', () => { + const post = { + props: { + from_webhook: 'false', + }, + } as PostModel; + + const result = isFromWebhook(post); + expect(result).toBe(false); + }); + }); + + describe('isEdited', () => { + it('should return true if the post is edited', () => { + const post = { + editAt: 1000, + } as PostModel; + + const result = isEdited(post); + expect(result).toBe(true); + }); + + it('should return false if the post is not edited', () => { + const post = { + editAt: 0, + } as PostModel; + + const result = isEdited(post); + expect(result).toBe(false); + }); + }); + + describe('isPostEphemeral', () => { + it('should return true for an ephemeral post', () => { + const post = { + type: Post.POST_TYPES.EPHEMERAL, + } as PostModel; + + const result = isPostEphemeral(post); + expect(result).toBe(true); + }); + + it('should return false for a non-ephemeral post', () => { + const post = { + type: 'normal', + } as PostModel; + + const result = isPostEphemeral(post); + expect(result).toBe(false); + }); + }); + + describe('isPostFailed', () => { + it('should return true if the post has failed prop', () => { + const post = { + props: { + failed: true, + }, + pendingPostId: 'id', + id: 'id', + updateAt: Date.now() - Post.POST_TIME_TO_FAIL - 1000, + } as PostModel; + + const result = isPostFailed(post); + expect(result).toBe(true); + }); + + it('should return true if the post is pending and the update time has exceeded the failure time', () => { + const post = { + props: {}, + pendingPostId: 'id', + id: 'id', + updateAt: Date.now() - Post.POST_TIME_TO_FAIL - 1000, + } as PostModel; + + const result = isPostFailed(post); + expect(result).toBe(true); + }); + + it('should return false if the post is not failed', () => { + const post = { + props: {}, + pendingPostId: 'id', + id: 'id', + updateAt: Date.now(), + } as PostModel; + + const result = isPostFailed(post); + expect(result).toBe(false); + }); + }); + + describe('isPostPendingOrFailed', () => { + it('should return true if the post is pending', () => { + const post = { + pendingPostId: 'id', + id: 'id', + props: {}, + } as PostModel; + + const result = isPostPendingOrFailed(post); + expect(result).toBe(true); + }); + + it('should return true if the post has failed', () => { + const post = { + pendingPostId: 'id', + id: 'id', + updateAt: Date.now() - Post.POST_TIME_TO_FAIL - 1000, + props: {}, + } as PostModel; + + const result = isPostPendingOrFailed(post); + expect(result).toBe(true); + }); + + it('should return false if the post is neither pending nor failed', () => { + const post = { + pendingPostId: 'differentId', + id: 'id', + props: {}, + } as PostModel; + + const result = isPostPendingOrFailed(post); + expect(result).toBe(false); + }); + }); + + describe('isSystemMessage', () => { + it('should return true if the post is a system message', () => { + const post = { + type: `${Post.POST_TYPES.SYSTEM_MESSAGE_PREFIX}any_type`, + } as PostModel; + + const result = isSystemMessage(post); + expect(result).toBe(true); + }); + + it('should return false if the post is not a system message', () => { + const post = { + type: 'normal_type', + } as PostModel; + + const result = isSystemMessage(post); + expect(result).toBe(false); + }); + }); + + describe('hasSpecialMentions', () => { + test.each([ + ['@here where is Jessica Hyde', true], + ['@all where is Jessica Hyde', true], + ['@channel where is Jessica Hyde', true], + + ['where is Jessica Hyde @here', true], + ['where is Jessica Hyde @all', true], + ['where is Jessica Hyde @channel', true], + + ['where is Jessica @here Hyde', true], + ['where is Jessica @all Hyde', true], + ['where is Jessica @channel Hyde', true], + + ['where is Jessica Hyde\n@here', true], + ['where is Jessica Hyde\n@all', true], + ['where is Jessica Hyde\n@channel', true], + + ['where is Jessica\n@here Hyde', true], + ['where is Jessica\n@all Hyde', true], + ['where is Jessica\n@channel Hyde', true], + + ['where is Jessica Hyde @her', false], + ['where is Jessica Hyde @al', false], + ['where is Jessica Hyde @chann', false], + + ['where is Jessica Hyde@here', false], + ['where is Jessica Hyde@all', false], + ['where is Jessica Hyde@channel', false], + + ['where is Jessica @hereHyde', false], + ['where is Jessica @allHyde', false], + ['where is Jessica @channelHyde', false], + + ['@herewhere is Jessica Hyde@here', false], + ['@allwhere is Jessica Hyde@all', false], + ['@channelwhere is Jessica Hyde@channel', false], + + ['where is Jessica Hyde here', false], + ['where is Jessica Hyde all', false], + ['where is Jessica Hyde channel', false], + + ['where is Jessica Hyde', false], + ])('hasSpecialMentions: %s => %s', (message, expected) => { + expect(hasSpecialMentions(message)).toBe(expected); + }); + }); + + describe('fromAutoResponder', () => { + it('should return true if the post is from an auto responder', () => { + const post = { + type: Post.POST_TYPES.SYSTEM_AUTO_RESPONDER, + } as PostModel; + + const result = fromAutoResponder(post); + expect(result).toBe(true); + }); + + it('should return false if the post is not from an auto responder', () => { + const post = { + type: 'normal_type', + } as PostModel; + + const result = fromAutoResponder(post); + expect(result).toBe(false); + }); + }); + + describe('persistentNotificationsConfirmation', () => { + const serverUrl = 'http://server'; + const value = '@user'; + const mentionsList = ['@user']; + const sendMessage = jest.fn(); + const persistentNotificationMaxRecipients = 10; + const persistentNotificationInterval = 5; + const currentUserId = 'current_user_id'; + const channelName = 'channel_id__teammate_id'; + const intl = createIntl({locale: DEFAULT_LOCALE, messages: getTranslations(DEFAULT_LOCALE)}); + + it('should show alert with DM channel description when channelType is DM_CHANNEL', async () => { + const mockUser = {username: 'teammate'}; + (getUserById as jest.Mock).mockResolvedValue(mockUser); + + await persistentNotificationsConfirmation( + serverUrl, + value, + mentionsList, + intl, + sendMessage, + persistentNotificationMaxRecipients, + persistentNotificationInterval, + currentUserId, + channelName, + General.DM_CHANNEL, + ); + + expect(Alert.alert).toHaveBeenCalledWith( + intl.formatMessage({ + id: 'persistent_notifications.confirm.title', + defaultMessage: 'Send persistent notifications', + }), + intl.formatMessage({ + id: 'persistent_notifications.dm_channel.description', + defaultMessage: '@{username} will be notified every {interval, plural, one {minute} other {{interval} minutes}} until they’ve acknowledged or replied to the message.', + }, { + interval: persistentNotificationInterval, + username: mockUser.username, + }), + expect.any(Array), + ); + }); + + it('should show alert when special mentions are present', async () => { + await persistentNotificationsConfirmation( + serverUrl, + '@channel', + mentionsList, + intl, + sendMessage, + persistentNotificationMaxRecipients, + persistentNotificationInterval, + currentUserId, + channelName, + ); + + expect(Alert.alert).toHaveBeenCalledWith( + '', + intl.formatMessage({ + id: 'persistent_notifications.error.special_mentions', + defaultMessage: 'Cannot use @channel, @all or @here to mention recipients of persistent notifications.', + }), + expect.any(Array), + ); + }); + + it('should show alert when no mentions found', async () => { + (getUsersCountFromMentions as jest.Mock).mockResolvedValue(0); + + await persistentNotificationsConfirmation( + serverUrl, + value, + mentionsList, + intl, + sendMessage, + persistentNotificationMaxRecipients, + persistentNotificationInterval, + currentUserId, + channelName, + ); + + expect(Alert.alert).toHaveBeenCalledWith( + intl.formatMessage({ + id: 'persistent_notifications.error.no_mentions.title', + defaultMessage: 'Recipients must be @mentioned', + }), + intl.formatMessage({ + id: 'persistent_notifications.error.no_mentions.description', + defaultMessage: 'There are no recipients mentioned in your message. You’ll need add mentions to be able to send persistent notifications.', + }), + expect.any(Array), + ); + }); + + it('should show alert when mentions exceed max recipients', async () => { + (getUsersCountFromMentions as jest.Mock).mockResolvedValue(15); + + await persistentNotificationsConfirmation( + serverUrl, + value, + mentionsList, + intl, + sendMessage, + persistentNotificationMaxRecipients, + persistentNotificationInterval, + currentUserId, + channelName, + ); + + expect(Alert.alert).toHaveBeenCalledWith( + intl.formatMessage({ + id: 'persistent_notifications.error.max_recipients.title', + defaultMessage: 'Too many recipients', + }), + intl.formatMessage({ + id: 'persistent_notifications.error.max_recipients.description', + defaultMessage: 'You can send persistent notifications to a maximum of {max} recipients. There are {count} recipients mentioned in your message. You’ll need to change who you’ve mentioned before you can send.', + }, { + max: persistentNotificationMaxRecipients, + count: mentionsList.length, + }), + expect.any(Array), + ); + }); + + it('should show confirmation alert for valid mentions within limit', async () => { + (getUsersCountFromMentions as jest.Mock).mockResolvedValue(5); + + await persistentNotificationsConfirmation( + serverUrl, + value, + mentionsList, + intl, + sendMessage, + persistentNotificationMaxRecipients, + persistentNotificationInterval, + currentUserId, + channelName, + ); + + expect(Alert.alert).toHaveBeenCalledWith( + intl.formatMessage({ + id: 'persistent_notifications.confirm.title', + defaultMessage: 'Send persistent notifications', + }), + intl.formatMessage({ + id: 'persistent_notifications.confirm.description', + defaultMessage: 'Mentioned recipients will be notified every {interval, plural, one {minute} other {{interval} minutes}} until they’ve acknowledged or replied to the message.', + }, { + interval: persistentNotificationInterval, + }), + expect.any(Array), + ); + }); + }); + + describe('postUserDisplayName', () => { + it('should return the override username if from webhook and override is enabled', () => { + const post = { + props: { + from_webhook: 'true', + override_username: 'webhook_user', + }, + } as PostModel; + + const result = postUserDisplayName(post, undefined, undefined, true); + expect(result).toBe('webhook_user'); + }); + + it('should return the author’s display name if not from webhook or override is disabled', () => { + const post = { + props: { + from_webhook: 'false', + }, + } as PostModel; + const author = { + username: 'user1', + locale: 'en', + } as UserModel; + + const result = postUserDisplayName(post, author, undefined, false); + expect(result).toBe('user1'); + }); + + it('should return the author’s display name using the teammate name display', () => { + const post = { + props: { + from_webhook: 'false', + }, + } as PostModel; + const author = { + username: 'user1', + locale: 'en', + } as UserModel; + + const result = postUserDisplayName(post, author, 'nickname', false); + expect(result).toBe('user1'); + }); + }); + + describe('shouldIgnorePost', () => { + it('should return true if the post type is in the ignore list', () => { + const post = { + type: Post.POST_TYPES.CHANNEL_DELETED, + } as Post; + + const result = shouldIgnorePost(post); + expect(result).toBe(true); + }); + + it('should return false if the post type is not in the ignore list', () => { + const post = { + type: Post.POST_TYPES.EPHEMERAL, + } as Post; + + const result = shouldIgnorePost(post); + expect(result).toBe(false); + }); + }); + + describe('processPostsFetched', () => { + it('should process the fetched posts correctly', () => { + const data = { + order: ['post1', 'post2'], + posts: { + post1: {id: 'post1', message: 'First post'}, + post2: {id: 'post2', message: 'Second post'}, + }, + prev_post_id: 'post0', + } as unknown as PostResponse; + + const result = processPostsFetched(data); + expect(result).toEqual({ + posts: [ + {id: 'post1', message: 'First post'}, + {id: 'post2', message: 'Second post'}, + ], + order: ['post1', 'post2'], + previousPostId: 'post0', + }); + }); + }); + + describe('getLastFetchedAtFromPosts', () => { + it('should return the maximum timestamp from the posts', () => { + const posts = [ + {create_at: 1000, update_at: 2000, delete_at: 0}, + {create_at: 1500, update_at: 2500, delete_at: 3000}, + ] as Post[]; + + const result = getLastFetchedAtFromPosts(posts); + expect(result).toBe(3000); + }); + + it('should return 0 if no posts are provided', () => { + const result = getLastFetchedAtFromPosts(); + expect(result).toBe(0); + }); + }); + + describe('moreThan5minAgo', () => { + it('should return true if the time is more than 5 minutes ago', () => { + const time = Date.now() - toMilliseconds({minutes: 6}); + const result = moreThan5minAgo(time); + expect(result).toBe(true); + }); + + it('should return false if the time is within 5 minutes', () => { + const time = Date.now() - toMilliseconds({minutes: 4}); + const result = moreThan5minAgo(time); + expect(result).toBe(false); + }); }); }); diff --git a/app/utils/post_list/index.test.ts b/app/utils/post_list/index.test.ts new file mode 100644 index 00000000000..29432aafb81 --- /dev/null +++ b/app/utils/post_list/index.test.ts @@ -0,0 +1,813 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Post} from '@constants'; + +import { + selectOrderedPostsWithPrevAndNext, + selectOrderedPosts, + generateCombinedPost, + getDateForDateLine, + getPostIdsForCombinedUserActivityPost, + preparePostList, + shouldFilterJoinLeavePost, +} from '.'; + +import type PostModel from '@typings/database/models/servers/post'; + +const mockPostModel = (overrides: Partial = {}): PostModel => ({ + id: 'post-id', + channelId: 'channel-id', + createAt: Date.now(), + deleteAt: 0, + type: 'custom_post_type', + userId: 'user-id', + ...overrides, +} as PostModel); + +describe('selectOrderedPostsWithPrevAndNext', () => { + const lastViewedAt = Date.now() - 1000; // 1 second ago + const currentUserId = 'current-user-id'; + const currentUsername = 'current-username'; + const showJoinLeave = true; + const currentTimezone = 'America/New_York'; + const isThreadScreen = false; + const savedPostIds = new Set(); + + it('should return an empty array when posts array is empty', () => { + const result = selectOrderedPostsWithPrevAndNext([], lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + expect(result).toEqual([]); + }); + + it('should return ordered posts with previous and next posts', () => { + const posts = [ + mockPostModel({id: 'post1', createAt: Date.now() - 5000}), // 5 seconds ago + mockPostModel({id: 'post2', createAt: Date.now() - 10000}), // 10 seconds ago + mockPostModel({id: 'post3', createAt: Date.now() - 15000}), // 15 seconds ago + ]; + + const result = selectOrderedPostsWithPrevAndNext(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // The number of posts returned should match the input + expect(result.length).toBe(4); + + // Ensure the next and previous posts are set correctly + expect(typeof result[0].value === 'object' && result[0].value.nextPost).toBeUndefined(); // First post shouldn't have nextPost + expect(typeof result[0].value === 'object' && result[0].value.previousPost).toBe(posts[1]); + + expect(typeof result[1].value === 'object' && result[1].value.nextPost).toBe(posts[0]); + expect(typeof result[1].value === 'object' && result[1].value.previousPost).toBe(posts[2]); + + expect(typeof result[2].value === 'object' && result[2].value.nextPost).toBe(posts[1]); + expect(typeof result[2].value === 'object' && result[2].value.previousPost).toBeUndefined(); // Last post shouldn't have nextPost + }); + + it('should include date headers between posts from different days', () => { + const yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); // 1 day ago + + const posts = [ + mockPostModel({id: 'post1', createAt: yesterday.getTime()}), // Yesterday + mockPostModel({id: 'post2', createAt: Date.now()}), // Today + ]; + + const result = selectOrderedPostsWithPrevAndNext(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // There should be 4 items: 2 posts + 2 date headers + expect(result.length).toBe(5); + + // Ensure the first item is a date header + expect(result[1].type).toBe('date'); + expect(result[4].type).toBe('date'); + }); + + it('should add "start-of-new-messages" indicator when there are new posts', () => { + const newPostTime = Date.now() + 1000; // Post in the future (newer than `lastViewedAt`) + + const posts = [ + mockPostModel({id: 'post1', createAt: newPostTime, userId: 'another-user-id'}), // New post by another user + mockPostModel({id: 'post2', createAt: Date.now() - 5000}), // Older post + ]; + + const result = selectOrderedPostsWithPrevAndNext(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // There should be 3 items: 1 "start-of-new-messages" + 2 posts + expect(result.length).toBe(4); + + // Ensure the "start-of-new-messages" indicator is added + expect(result[1].type).toBe('start-of-new-messages'); + }); + + it('should not add "start-of-new-messages" indicator if there are no new posts', () => { + const oldPostTime = Date.now() - 10000; // Older than `lastViewedAt` + + const posts = [ + mockPostModel({id: 'post1', createAt: oldPostTime, userId: 'another-user-id'}), // Old post by another user + ]; + + const result = selectOrderedPostsWithPrevAndNext(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // There should be only 1 post one date and no "start-of-new-messages" + expect(result.length).toBe(2); + expect(result[0].type).toBe('post'); + }); + + it('should add thread overview when isThreadScreen is true', () => { + const posts = [ + mockPostModel({id: 'post1', createAt: Date.now()}), + ]; + + const result = selectOrderedPostsWithPrevAndNext(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, true, savedPostIds); + + // There should be 4 items: 1 post + 1 thread overview + 1 date + 1 new messages + expect(result.length).toBe(4); + + // Ensure the last item is a thread overview + expect(result[0].type).toBe('thread-overview'); + }); + + it('should mark saved posts as isSaved', () => { + const savedPosts = new Set(['post1']); + const posts = [ + mockPostModel({id: 'post1', createAt: Date.now()}), + mockPostModel({id: 'post2', createAt: Date.now()}), + ]; + + const result = selectOrderedPostsWithPrevAndNext(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPosts); + + // The first post should be marked as saved + expect(typeof result[0].value === 'object' && result[0].value.isSaved).toBe(true); + + // The second post should not be marked as saved + expect(typeof result[1].value === 'object' && result[1].value.isSaved).toBe(false); + }); +}); + +describe('selectOrderedPosts', () => { + const lastViewedAt = Date.now() - 1000; // 1 second ago + const currentUserId = 'current-user-id'; + const currentUsername = 'current-username'; + const showJoinLeave = true; + const currentTimezone = 'America/New_York'; + const isThreadScreen = false; + const savedPostIds = new Set(); + + it('should return an empty array when posts array is empty', () => { + const result = selectOrderedPosts([], lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + expect(result).toEqual([]); + }); + + it('should order posts with date headers and new message indicators', () => { + const posts = [ + mockPostModel({id: 'post1', createAt: Date.now() - 5000}), // 5 seconds ago + mockPostModel({id: 'post2', createAt: Date.now() - 10000}), // 10 seconds ago + ]; + + const result = selectOrderedPosts(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // There should be 3 items: 2 posts and 1 date header + expect(result.length).toBe(3); + + // Ensure the first item is a date header + expect(result[0].type).toBe('post'); + + // Ensure the rest are posts + expect(result[1].type).toBe('post'); + expect(result[2].type).toBe('date'); + }); + + it('should add the "start-of-new-messages" indicator when there are new messages', () => { + const newPostTime = Date.now() + 1000; // Future post (newer than `lastViewedAt`) + + const posts = [ + mockPostModel({id: 'post1', createAt: newPostTime, userId: 'another-user-id'}), // New post from another user + mockPostModel({id: 'post2', createAt: Date.now() - 5000}), // Older post + ]; + + const result = selectOrderedPosts(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // There should be 4 items: 1 "start-of-new-messages" + 2 posts + 1 date header + expect(result.length).toBe(4); + + // Ensure the "start-of-new-messages" indicator is added + expect(result[1].type).toBe('start-of-new-messages'); + }); + + it('should not add "start-of-new-messages" if there are no new posts', () => { + const oldPostTime = Date.now() - 2000; // Older than `lastViewedAt` + + const posts = [ + mockPostModel({id: 'post1', createAt: oldPostTime, userId: 'another-user-id'}), // Old post by another user + ]; + + const result = selectOrderedPosts(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // There should be 2 items: 1 post + 1 date header, no "start-of-new-messages" + expect(result.length).toBe(2); + expect(result[1].type).toBe('date'); + expect(result[0].type).toBe('post'); + }); + + it('should handle timezone differences correctly', () => { + const postTime = Date.now() - 5000; // 5 seconds ago + const postInDifferentTimezone = mockPostModel({createAt: postTime}); + + const result = selectOrderedPosts([postInDifferentTimezone], lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, 'Europe/London', isThreadScreen, savedPostIds); + + // There should be 2 items: 1 date header + 1 post + expect(result.length).toBe(2); + expect(result[0].type).toBe('post'); + expect(result[1].type).toBe('date'); + }); + + it('should not filter out join/leave posts if showJoinLeave is false and the username is the current user', () => { + const joinLeavePost = mockPostModel({type: Post.POST_TYPES.LEAVE_CHANNEL, props: {username: currentUsername}}); + + const result = selectOrderedPosts([joinLeavePost], lastViewedAt, true, currentUserId, currentUsername, false, currentTimezone, isThreadScreen, savedPostIds); + + expect(result.length).toBe(3); + }); + + it('should include join/leave posts if showJoinLeave is true', () => { + const joinLeavePost = mockPostModel({type: Post.POST_TYPES.LEAVE_CHANNEL, props: {username: currentUsername}}); + + const result = selectOrderedPosts([joinLeavePost], lastViewedAt, true, currentUserId, currentUsername, true, currentTimezone, isThreadScreen, savedPostIds); + + // There should be 2 items: 1 date header + 1 join/leave post + new message + expect(result.length).toBe(3); + expect(result[0].type).toBe('post'); + }); + + it('should add thread overview post when isThreadScreen is true', () => { + const posts = [ + mockPostModel({id: 'post1', createAt: Date.now()}), + ]; + + const result = selectOrderedPosts(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, true, savedPostIds); + + // There should be 3 items: 1 post + 1 thread overview + 1 date header + expect(result.length).toBe(4); + + // Ensure the last item is a thread overview + expect(result[0].type).toBe('thread-overview'); + }); + + it('should mark saved posts as isSaved', () => { + const savedPosts = new Set(['post1']); + const posts = [ + mockPostModel({id: 'post1', createAt: Date.now()}), + mockPostModel({id: 'post2', createAt: Date.now()}), + ]; + + const result = selectOrderedPosts(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPosts); + + // The first post should be marked as saved + expect(typeof result[0].value === 'object' && result[0].value.isSaved).toBe(true); + + // The second post should not be marked as saved + expect(typeof result[1].value === 'object' && result[1].value.isSaved).toBe(false); + }); +}); + +describe('generateCombinedPost', () => { + it('should generate a combined post with the correct id and channel_id', () => { + const systemPosts = [ + mockPostModel({id: 'post1', channelId: 'channel1', createAt: Date.now() - 5000, message: 'Message 1'}), + mockPostModel({id: 'post2', channelId: 'channel1', createAt: Date.now() - 10000, message: 'Message 2'}), + ]; + + const combinedId = 'combined-post-id'; + const result = generateCombinedPost(combinedId, systemPosts); + + // Ensure the combined post has the correct id and channel_id + expect(result.id).toBe(combinedId); + expect(result.channel_id).toBe('channel1'); + }); + + it('should combine messages from all system posts into a single message', () => { + const systemPosts = [ + mockPostModel({message: 'Message 1'}), + mockPostModel({message: 'Message 2'}), + ]; + + const result = generateCombinedPost('combined-post-id', systemPosts); + + // The combined message should be a concatenation of all system post messages + expect(result.message).toBe('Message 1\nMessage 2'); + }); + + it('should use the createAt timestamp from the last post in the system posts array', () => { + const systemPosts = [ + mockPostModel({createAt: Date.now() - 20000}), + mockPostModel({createAt: Date.now() - 10000}), + mockPostModel({createAt: Date.now() - 5000}), + ]; + + const result = generateCombinedPost('combined-post-id', systemPosts); + + // The createAt timestamp should be from the last post in the array + expect(result.create_at).toBe(systemPosts[systemPosts.length - 1].createAt); + }); + + it('should include all system_post_ids in the props object', () => { + const systemPosts = [ + mockPostModel({id: 'post1'}), + mockPostModel({id: 'post2'}), + mockPostModel({id: 'post3'}), + ]; + + const result = generateCombinedPost('combined-post-id', systemPosts); + + // Ensure all post ids are included in the system_post_ids prop + expect(result.props.system_post_ids).toEqual(['post1', 'post2', 'post3']); + }); + + it('should include combined messages in the props object', () => { + const systemPosts = [ + mockPostModel({message: 'Message 1'}), + mockPostModel({message: 'Message 2'}), + ]; + + const result = generateCombinedPost('combined-post-id', systemPosts); + + // Ensure the messages prop includes all individual messages + expect(result.props.messages).toEqual(['Message 1', 'Message 2']); + }); + + it('should set the post type to COMBINED_USER_ACTIVITY', () => { + const systemPosts = [ + mockPostModel({id: 'post1'}), + mockPostModel({id: 'post2'}), + ]; + + const result = generateCombinedPost('combined-post-id', systemPosts); + + // Ensure the post type is COMBINED_USER_ACTIVITY + expect(result.type).toBe('system_combined_user_activity'); + }); + + it('should handle an empty systemPosts array gracefully', () => { + const systemPosts: PostModel[] = []; + + // Test that an empty array throws an error or handles the case + expect(() => generateCombinedPost('combined-post-id', systemPosts)).toThrow(); + }); + + it('should correctly sort system posts based on post type priority', () => { + const systemPosts: PostModel[] = [ + mockPostModel({ + id: 'post1', + type: Post.POST_TYPES.ADD_TO_TEAM, + props: { + addedUserId: 'user1', + addedUsername: 'username1', + }, + }), + mockPostModel({ + id: 'post2', + type: Post.POST_TYPES.REMOVE_FROM_TEAM, + props: { + removedUserId: 'user2', + removedUsername: 'username2', + }, + }), + mockPostModel({ + id: 'post3', + type: Post.POST_TYPES.JOIN_TEAM, + props: {}, + }), + mockPostModel({ + id: 'post4', + type: Post.POST_TYPES.LEAVE_TEAM, + props: {}, + }), + ]; + + const combinedPostId = 'combined-post-id'; + const result = generateCombinedPost(combinedPostId, systemPosts); + + // Extract the post types from the sorted messages in the combined post props + const sortedPostTypes = result.props.user_activity_posts.map((post: PostModel) => post.type); + + // Expect the post types to be sorted based on their priorities in comparePostTypes + expect(sortedPostTypes).toEqual([ + Post.POST_TYPES.ADD_TO_TEAM, // Next priority + Post.POST_TYPES.REMOVE_FROM_TEAM, // Lowest priority + Post.POST_TYPES.JOIN_TEAM, // Highest priority + Post.POST_TYPES.LEAVE_TEAM, // Next priority + ]); + }); + + it('should combine user activity for ADD_TO_TEAM posts correctly', () => { + const systemPosts: PostModel[] = [ + mockPostModel({ + id: 'post1', + type: Post.POST_TYPES.ADD_TO_TEAM, + props: { + addedUserId: 'user1', + addedUsername: 'username1', + }, + }), + mockPostModel({ + id: 'post2', + type: Post.POST_TYPES.ADD_TO_TEAM, + props: { + addedUserId: 'user2', + addedUsername: 'username2', + }, + }), + ]; + + const combinedPostId = 'combined-post-id'; + const result = generateCombinedPost(combinedPostId, systemPosts); + + // Ensure user activities are combined for ADD_TO_TEAM + expect(result.props.user_activity_posts.length).toBe(2); + expect(result.props.user_activity_posts[0].props.addedUserId).toBe('user1'); + expect(result.props.user_activity_posts[1].props.addedUserId).toBe('user2'); + }); + + it('should combine user activity for REMOVE_FROM_CHANNEL posts correctly', () => { + const systemPosts: PostModel[] = [ + mockPostModel({ + id: 'post1', + type: Post.POST_TYPES.REMOVE_FROM_CHANNEL, + props: { + removedUserId: 'user3', + removedUsername: 'username3', + }, + }), + mockPostModel({ + id: 'post2', + type: Post.POST_TYPES.REMOVE_FROM_CHANNEL, + props: { + removedUserId: 'user4', + removedUsername: 'username4', + }, + }), + ]; + + const combinedPostId = 'combined-post-id'; + const result = generateCombinedPost(combinedPostId, systemPosts); + + // Ensure user activities are combined for REMOVE_FROM_CHANNEL + expect(result.props.user_activity_posts.length).toBe(2); + expect(result.props.user_activity_posts[0].props.removedUserId).toBe('user3'); + expect(result.props.user_activity_posts[1].props.removedUserId).toBe('user4'); + }); + + it('should handle empty systemPosts gracefully', () => { + const systemPosts: PostModel[] = []; + + const combinedPostId = 'combined-post-id'; + + // Expect an error due to empty systemPosts + expect(() => generateCombinedPost(combinedPostId, systemPosts)).toThrow(); + }); +}); + +describe('getDateForDateLine', () => { + it('should extract the correct timestamp from a valid date line', () => { + const dateLine = 'date-1626098400000'; // July 12, 2021 + const result = getDateForDateLine(dateLine); + + // Expect the result to be the correct timestamp + expect(result).toBe(1626098400000); + }); + + it('should handle invalid date lines and return NaN', () => { + const invalidDateLine = 'invalid-prefix-12345'; + + // The function should throw an error if the prefix is incorrect + expect(getDateForDateLine(invalidDateLine)).toBeNaN(); + }); + + it('should return NaN if the string is not a valid date line format', () => { + const incompleteDateLine = 'date-'; // Missing the timestamp part + + // The function should throw an error if no valid timestamp is present + expect(getDateForDateLine(incompleteDateLine)).toBeNaN(); + }); + + it('should return NaN if the timestamp part is not a number', () => { + const invalidTimestampDateLine = 'date-not_a_number'; + + // The result should be NaN when the timestamp part is not a valid number + const result = getDateForDateLine(invalidTimestampDateLine); + expect(result).toBeNaN(); + }); + + it('should extract timestamp correctly when there are extra characters after the timestamp', () => { + const dateLineWithExtra = 'date-1626098400000-extra'; + const result = getDateForDateLine(dateLineWithExtra); + + // Expect the result to correctly extract the timestamp and ignore the extra characters + expect(result).toBe(1626098400000); + }); +}); + +describe('getPostIdsForCombinedUserActivityPost', () => { + it('should extract post IDs from a valid combined user activity post string', () => { + const combinedPostId = 'user-activity-post1_post2_post3'; + const result = getPostIdsForCombinedUserActivityPost(combinedPostId); + + // Expect the result to be an array of post IDs + expect(result).toEqual(['post1', 'post2', 'post3']); + }); + + it('should return an array with an empty value if there are no post IDs after the prefix', () => { + const combinedPostId = 'user-activity-'; + const result = getPostIdsForCombinedUserActivityPost(combinedPostId); + + // Expect an array with empty value since there are no post IDs after the prefix + expect(result).toEqual(['']); + }); + + it('should return a single post ID if there is only one post ID', () => { + const combinedPostId = 'user-activity-post1'; + const result = getPostIdsForCombinedUserActivityPost(combinedPostId); + + // Expect an array with one post ID + expect(result).toEqual(['post1']); + }); + + it('should return an empty array if the string does not start with the correct prefix', () => { + const invalidPrefix = 'wrong-prefix-post1_post2'; + + expect(() => getPostIdsForCombinedUserActivityPost(invalidPrefix)).toThrow('Invalid prefix'); + }); + + it('should handle post IDs with special characters correctly', () => { + const combinedPostId = 'user-activity-post1_post@_special#id_3'; + const result = getPostIdsForCombinedUserActivityPost(combinedPostId); + + // Expect the result to correctly extract the post IDs, including special characters + expect(result).toEqual(['post1', 'post@', 'special#id', '3']); + }); +}); + +describe('preparePostList', () => { + const lastViewedAt = Date.now() - 1000; // 1 second ago + const currentUserId = 'current-user-id'; + const currentUsername = 'current-username'; + const showJoinLeave = true; + const currentTimezone = 'America/New_York'; + const isThreadScreen = false; + const savedPostIds = new Set(); + + it('should return an empty array when posts array is empty', () => { + const result = preparePostList([], lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + expect(result).toEqual([]); + }); + + it('should process posts and add new messages indicator if necessary', () => { + const newPostTime = Date.now() + 1000; // Future post (newer than `lastViewedAt`) + const posts = [ + mockPostModel({id: 'post1', createAt: newPostTime, userId: 'another-user-id'}), + mockPostModel({id: 'post2', createAt: Date.now() - 5000}), + ]; + + const result = preparePostList(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // There should be 4 items: 1 "start-of-new-messages" + 2 posts + 1 date header + expect(result.length).toBe(4); + expect(result[0].type).toBe('post'); + expect(result[1].type).toBe('start-of-new-messages'); + expect(result[2].type).toBe('post'); + expect(result[3].type).toBe('date'); + }); + + it('should handle posts without a new message indicator', () => { + const oldPostTime = Date.now() - 2000; // Older than `lastViewedAt` + const posts = [ + mockPostModel({id: 'post1', createAt: oldPostTime, userId: 'another-user-id'}), + ]; + + const result = preparePostList(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // There should be 2 items: 1 post + 1 date header + expect(result.length).toBe(2); + expect(result[0].type).toBe('post'); + expect(result[1].type).toBe('date'); + }); + + it('should combine user activity posts correctly', () => { + const posts = [ + mockPostModel({id: 'post1', type: 'user-activity', props: {user_activity_posts: []}}), + mockPostModel({id: 'post2', type: 'user-activity', props: {user_activity_posts: []}}), + ]; + + const result = preparePostList(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // Ensure that user activity posts are combined correctly + // Since it's calling `combineUserActivityPosts`, it should handle those posts. + expect(result.length).toBe(4); // 2 posts + new messages + 1 date header + expect(result[0].type).toBe('post'); + expect(result[1].type).toBe('post'); + expect(result[2].type).toBe('start-of-new-messages'); + expect(result[3].type).toBe('date'); + }); + + it('should handle posts with deleteAt property in preparePostList', () => { + const deletedPost: PostModel = mockPostModel({ + id: 'deleted-post', + deleteAt: Date.now(), // Set deleteAt to a non-zero value + createAt: Date.now(), + type: 'post', // Ensure it's a 'post' type + userId: 'user-id', + message: 'This is a deleted post', + props: {}, + }); + + const posts = [ + deletedPost, // The post that should trigger the deleteAt condition + ]; + + const result = preparePostList(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // Ensure the deleted post is included in the result + expect(result.length).toBe(3); // 1 date header + 1 deleted post + new messages + expect(typeof result[0].value === 'object' && result[0].value.currentPost.id).toBe('deleted-post'); + }); + + it('should combine consecutive user activity posts when postIsUserActivity is true', () => { + // Mock consecutive user activity posts + const userActivityPost1: PostModel = mockPostModel({ + id: 'user-activity-post1', + type: Post.POST_TYPES.LEAVE_CHANNEL, + createAt: Date.now() - 5000, + userId: 'user-id-1', + message: 'User activity post 1', + props: {}, + }); + + const userActivityPost2: PostModel = mockPostModel({ + id: 'user-activity-post2', + type: Post.POST_TYPES.JOIN_CHANNEL, + createAt: Date.now() - 4000, + userId: 'user-id-2', + message: 'User activity post 2', + props: {}, + }); + + const posts: PostModel[] = [ + userActivityPost1, + userActivityPost2, // These two should be combined + ]; + + const result = preparePostList(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPostIds); + + // We expect the two user activity posts to be combined + expect(result.length).toBe(2); // 1 date header + 1 combined user activity post + expect(result[0].type).toBe('user-activity'); + }); + + it('should filter out join/leave posts if showJoinLeave is false for other users', () => { + const joinLeavePost = mockPostModel({type: Post.POST_TYPES.LEAVE_CHANNEL, props: {username: 'other-user'}}); + const result = preparePostList([joinLeavePost], lastViewedAt, true, currentUserId, currentUsername, false, currentTimezone, isThreadScreen, savedPostIds); + + // No posts should be returned because showJoinLeave is false + expect(result.length).toBe(0); + }); + + it('should include join/leave posts if showJoinLeave is true', () => { + const joinLeavePost = mockPostModel({type: Post.POST_TYPES.JOIN_CHANNEL, props: {username: currentUsername}}); + const result = preparePostList([joinLeavePost], lastViewedAt, true, currentUserId, currentUsername, true, currentTimezone, isThreadScreen, savedPostIds); + + // There should be 2 items: 1 post + new message + 1 date header + expect(result.length).toBe(3); + expect(result[0].type).toBe('user-activity'); + }); + + it('should handle saved posts correctly', () => { + const savedPosts = new Set(['post1']); + const posts = [ + mockPostModel({id: 'post1', createAt: Date.now()}), + mockPostModel({id: 'post2', createAt: Date.now()}), + ]; + + const result = preparePostList(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, isThreadScreen, savedPosts); + + // The first post should be marked as saved + expect(typeof result[0].value === 'object' && result[0].value.isSaved).toBe(true); + + // The second post should not be marked as saved + expect(typeof result[1].value === 'object' && result[1].value.isSaved).toBe(false); + }); + + it('should handle thread overview when isThreadScreen is true', () => { + const posts = [ + mockPostModel({id: 'post1', createAt: Date.now()}), + ]; + + const result = preparePostList(posts, lastViewedAt, true, currentUserId, currentUsername, showJoinLeave, currentTimezone, true, savedPostIds); + + // There should be 3 items: 1 post + 1 thread overview + 1 date header + new line + expect(result.length).toBe(4); + + // Ensure the last item is a thread overview + expect(result[0].type).toBe('thread-overview'); + }); + + it('should return false when post has no props in isJoinLeavePostForUsername', () => { + const joinLeavePost = mockPostModel({type: Post.POST_TYPES.LEAVE_CHANNEL, props: undefined}); // No props + const result = preparePostList([joinLeavePost], lastViewedAt, true, currentUserId, currentUsername, true, currentTimezone, isThreadScreen, savedPostIds); + + // Post should be included because showJoinLeave is true, but it shouldn't be treated as a join/leave post for the current user + expect(result.length).toBe(3); // 1 post + 1 date header + new messages + expect(result[0].type).toBe('user-activity'); + }); + + it('should return false when currentUsername is undefined in isJoinLeavePostForUsername', () => { + const joinLeavePost = mockPostModel({type: Post.POST_TYPES.LEAVE_CHANNEL, props: {username: 'other-username'}}); + const result = preparePostList([joinLeavePost], lastViewedAt, true, currentUserId, '', true, currentTimezone, isThreadScreen, savedPostIds); + + // Post should be included because showJoinLeave is true, but it shouldn't be treated as a join/leave post for the current user since currentUsername is undefined + expect(result.length).toBe(3); // 1 post + 1 date header + expect(result[0].type).toBe('user-activity'); + }); +}); + +describe('shouldFilterJoinLeavePost', () => { + const currentUsername = 'current-username'; + + it('should not filter non-join/leave posts', () => { + const post = mockPostModel({type: 'custom_post_type'}); + const result = shouldFilterJoinLeavePost(post, false, currentUsername); + + // Non-join/leave posts should not be filtered regardless of showJoinLeave value + expect(result).toBe(false); + }); + + it('should not filter join/leave posts if showJoinLeave is true', () => { + const post = mockPostModel({type: Post.POST_TYPES.LEAVE_CHANNEL, props: {username: 'another-user'}}); + const result = shouldFilterJoinLeavePost(post, true, currentUsername); + + // Join/leave posts should not be filtered if showJoinLeave is true + expect(result).toBe(false); + }); + + it('should not filter join/leave posts related to the current user even if showJoinLeave is false', () => { + const post = mockPostModel({type: Post.POST_TYPES.JOIN_CHANNEL, props: {username: currentUsername}}); + const result = shouldFilterJoinLeavePost(post, false, currentUsername); + + // Join/leave posts for the current user should not be filtered even if showJoinLeave is false + expect(result).toBe(false); + }); + + it('should filter join/leave posts unrelated to the current user if showJoinLeave is false', () => { + const post = mockPostModel({type: Post.POST_TYPES.LEAVE_CHANNEL, props: {username: 'another-user'}}); + const result = shouldFilterJoinLeavePost(post, false, currentUsername); + + // Join/leave posts unrelated to the current user should be filtered if showJoinLeave is false + expect(result).toBe(true); + }); + + it('should return true if post has no props', () => { + const post = mockPostModel({type: Post.POST_TYPES.LEAVE_CHANNEL}); + const result = shouldFilterJoinLeavePost(post, false, currentUsername); + + // The post should be filtered because we can't determine if it's a join/leave post for the current user + expect(result).toBe(true); + }); + + it('should return true if currentUsername is undefined', () => { + const post = mockPostModel({type: Post.POST_TYPES.LEAVE_CHANNEL, props: {username: 'another-user'}}); + const result = shouldFilterJoinLeavePost(post, false, ''); + + // The post should be filtered because we can't determine if it's a join/leave post for the current user + expect(result).toBe(true); + }); + + it('should iterate over child posts in user_activity_posts and not filter if one matches current user', () => { + const childPost1 = mockPostModel({id: 'child1', props: {username: 'another-user'}}); + const childPost2 = mockPostModel({id: 'child2', props: {username: currentUsername}}); + const post = mockPostModel({ + type: Post.POST_TYPES.LEAVE_CHANNEL, + props: { + user_activity_posts: [childPost1, childPost2], // Add child posts here + }, + }); + + const result = shouldFilterJoinLeavePost(post, false, currentUsername); + + // It should not filter because one of the child posts has the currentUsername + expect(result).toBe(false); + }); + + it('should iterate over child posts in user_activity_posts and filter if none match current user', () => { + const childPost1 = mockPostModel({id: 'child1', props: {username: 'another-user'}}); + const childPost2 = mockPostModel({id: 'child2', props: {username: 'yet-another-user'}}); + const post = mockPostModel({ + type: Post.POST_TYPES.LEAVE_CHANNEL, + props: { + user_activity_posts: [childPost1, childPost2], // Add child posts here + }, + }); + + const result = shouldFilterJoinLeavePost(post, false, currentUsername); + + // It should filter because none of the child posts match currentUsername + expect(result).toBe(true); + }); +}); diff --git a/app/utils/post_list/index.ts b/app/utils/post_list/index.ts index 506c8f959da..b5f7496659b 100644 --- a/app/utils/post_list/index.ts +++ b/app/utils/post_list/index.ts @@ -356,6 +356,10 @@ export function getDateForDateLine(item: string) { } export function getPostIdsForCombinedUserActivityPost(item: string) { + if (!item.startsWith(COMBINED_USER_ACTIVITY)) { + throw new Error(`Invalid prefix, expected string to start with '${COMBINED_USER_ACTIVITY}'`); + } + return item.substring(COMBINED_USER_ACTIVITY.length).split('_'); } diff --git a/app/utils/push_proxy.test.ts b/app/utils/push_proxy.test.ts new file mode 100644 index 00000000000..664166b1c81 --- /dev/null +++ b/app/utils/push_proxy.test.ts @@ -0,0 +1,156 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {Alert} from 'react-native'; + +import { + storePushDisabledInServerAcknowledged, +} from '@actions/app/global'; +import { + PUSH_PROXY_RESPONSE_NOT_AVAILABLE, + PUSH_PROXY_RESPONSE_UNKNOWN, + PUSH_PROXY_STATUS_NOT_AVAILABLE, + PUSH_PROXY_STATUS_UNKNOWN, + PUSH_PROXY_STATUS_VERIFIED, +} from '@constants/push_proxy'; +import EphemeralStore from '@store/ephemeral_store'; + +import { + pushDisabledInServerAck, + canReceiveNotifications, + alertPushProxyError, + alertPushProxyUnknown, +} from './push_proxy'; +import {urlSafeBase64Encode} from './security'; + +import type {IntlShape} from 'react-intl'; + +jest.mock('react-native', () => ({ + Alert: { + alert: jest.fn(), + }, +})); + +jest.mock('@actions/app/global', () => ({ + storePushDisabledInServerAcknowledged: jest.fn(), +})); + +jest.mock('@queries/app/global', () => ({ + getPushDisabledInServerAcknowledged: jest.fn(), +})); + +jest.mock('@store/ephemeral_store', () => ({ + setPushProxyVerificationState: jest.fn(), +})); + +jest.mock('./security', () => ({ + urlSafeBase64Encode: jest.fn((url: string) => `encoded-${url}`), +})); + +// Mock pushDisabledInServerAck as it's not being mocked by default +jest.mock('./push_proxy', () => ({ + ...jest.requireActual('./push_proxy'), + pushDisabledInServerAck: jest.fn(), +})); + +describe('Notification utilities', () => { + const intl: IntlShape = { + formatMessage: ({defaultMessage}: { defaultMessage: string }) => defaultMessage, + } as IntlShape; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('canReceiveNotifications', () => { + test('handles PUSH_PROXY_RESPONSE_NOT_AVAILABLE', async () => { + const serverUrl = 'https://example.com'; + (pushDisabledInServerAck as jest.Mock).mockResolvedValue(false); + + await canReceiveNotifications(serverUrl, PUSH_PROXY_RESPONSE_NOT_AVAILABLE, intl); + + expect(EphemeralStore.setPushProxyVerificationState).toHaveBeenCalledWith(serverUrl, PUSH_PROXY_STATUS_NOT_AVAILABLE); + expect(Alert.alert).toHaveBeenCalled(); + }); + + test('handles PUSH_PROXY_RESPONSE_UNKNOWN', async () => { + const serverUrl = 'https://example.com'; + (pushDisabledInServerAck as jest.Mock).mockResolvedValue(false); + + await canReceiveNotifications(serverUrl, PUSH_PROXY_RESPONSE_UNKNOWN, intl); + + expect(EphemeralStore.setPushProxyVerificationState).toHaveBeenCalledWith(serverUrl, PUSH_PROXY_STATUS_UNKNOWN); + expect(Alert.alert).toHaveBeenCalled(); + }); + + test('handles default case', async () => { + const serverUrl = 'https://example.com'; + (pushDisabledInServerAck as jest.Mock).mockResolvedValue(false); + + await canReceiveNotifications(serverUrl, 'some_other_response', intl); + + expect(EphemeralStore.setPushProxyVerificationState).toHaveBeenCalledWith(serverUrl, PUSH_PROXY_STATUS_VERIFIED); + expect(Alert.alert).not.toHaveBeenCalled(); + }); + }); + + describe('alertPushProxyError', () => { + test('displays alert with correct messages', () => { + const serverUrl = 'https://example.com'; + const alert = jest.spyOn(Alert, 'alert'); + + alertPushProxyError(intl, serverUrl); + + expect(Alert.alert).toHaveBeenCalledWith( + 'Notifications cannot be received from this server', + 'Due to the configuration of this server, notifications cannot be received in the mobile app. Contact your system admin for more information.', + [{ + text: 'Okay', + onPress: expect.any(Function), + }], + ); + + alert?.mock.calls?.[0]?.[2]?.[0]?.onPress?.(); + expect(storePushDisabledInServerAcknowledged).toHaveBeenCalled(); + }); + }); + + describe('alertPushProxyUnknown', () => { + test('displays alert with correct messages', () => { + alertPushProxyUnknown(intl); + + expect(Alert.alert).toHaveBeenCalledWith( + 'Notifications could not be received from this server', + 'This server was unable to receive push notifications for an unknown reason. This will be attempted again next time you connect.', + [{ + text: 'Okay', + }], + ); + }); + }); + + describe('handleAlertResponse', () => { + const handleAlertResponse = async (buttonIndex: number, serverUrl?: string) => { + if (buttonIndex === 0 && serverUrl) { + await storePushDisabledInServerAcknowledged(urlSafeBase64Encode(serverUrl)); + } + }; + + test('stores acknowledgment when buttonIndex is 0 and serverUrl is provided', async () => { + const serverUrl = 'https://example.com'; + await handleAlertResponse(0, serverUrl); + expect(storePushDisabledInServerAcknowledged).toHaveBeenCalledWith('encoded-https://example.com'); + }); + + test('does not store acknowledgment when buttonIndex is not 0', async () => { + const serverUrl = 'https://example.com'; + await handleAlertResponse(1, serverUrl); + expect(storePushDisabledInServerAcknowledged).not.toHaveBeenCalled(); + }); + + test('does not store acknowledgment when serverUrl is not provided', async () => { + await handleAlertResponse(0); + expect(storePushDisabledInServerAcknowledged).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/app/utils/reviews.test.ts b/app/utils/reviews.test.ts new file mode 100644 index 00000000000..adbcdf6321d --- /dev/null +++ b/app/utils/reviews.test.ts @@ -0,0 +1,80 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +// Import necessary dependencies +import {isAvailableAsync} from 'expo-store-review'; + +import * as actions from '@actions/app/global'; +import LocalConfig from '@assets/config.json'; +import {Launch} from '@constants'; +import {getDontAskForReview, getLastAskedForReview} from '@queries/app/global'; +import {areAllServersSupported} from '@queries/app/servers'; +import {showReviewOverlay} from '@screens/navigation'; + +import {tryRunAppReview} from './reviews'; + +// Mocks +jest.mock('expo-store-review', () => ({ + isAvailableAsync: jest.fn(() => Promise.resolve(true)), +})); +jest.mock('@queries/app/servers', () => ({ + areAllServersSupported: jest.fn(() => Promise.resolve(true)), +})); +jest.mock('@queries/app/global', () => ({ + getDontAskForReview: jest.fn(() => Promise.resolve(false)), + getFirstLaunch: jest.fn().mockResolvedValueOnce(0).mockResolvedValue(Date.now()), + getLastAskedForReview: jest.fn().mockResolvedValueOnce(0).mockResolvedValue(Date.now() - (91 * 24 * 60 * 60 * 1000)), +})); +jest.mock('@actions/app/global', () => ({ + storeFirstLaunch: jest.fn(), +})); +jest.mock('@screens/navigation', () => ({ + showReviewOverlay: jest.fn(), +})); + +describe('tryRunAppReview function', () => { + afterEach(() => { + jest.clearAllMocks(); // Clear all mock calls after each test + }); + + it('should do nothing if LocalConfig.ShowReview is false', async () => { + LocalConfig.ShowReview = false; + await tryRunAppReview(Launch.Normal, true); + expect(isAvailableAsync).not.toHaveBeenCalled(); + }); + + it('should do nothing if coldStart is false', async () => { + LocalConfig.ShowReview = true; + await tryRunAppReview(Launch.Normal, false); + expect(isAvailableAsync).not.toHaveBeenCalled(); + }); + + it('should do nothing if launchType is not Launch.Normal', async () => { + LocalConfig.ShowReview = true; + await tryRunAppReview('SomeOtherType', true); + expect(isAvailableAsync).not.toHaveBeenCalled(); + }); + + it('should show review overlay if conditions are met', async () => { + LocalConfig.ShowReview = true; + const storeFirstLaunch = jest.spyOn(actions, 'storeFirstLaunch'); + await tryRunAppReview(Launch.Normal, true); + expect(isAvailableAsync).toHaveBeenCalled(); + expect(areAllServersSupported).toHaveBeenCalled(); + expect(getDontAskForReview).toHaveBeenCalled(); + expect(getLastAskedForReview).toHaveBeenCalled(); + expect(storeFirstLaunch).toHaveBeenCalled(); + }); + + it('should show review overlay if last review was done more than TIME_TO_NEXT_REVIEW ago', async () => { + const storeFirstLaunch = jest.spyOn(actions, 'storeFirstLaunch'); + LocalConfig.ShowReview = true; + await tryRunAppReview(Launch.Normal, true); + expect(isAvailableAsync).toHaveBeenCalled(); + expect(areAllServersSupported).toHaveBeenCalled(); + expect(getDontAskForReview).toHaveBeenCalled(); + expect(getLastAskedForReview).toHaveBeenCalled(); + expect(storeFirstLaunch).not.toHaveBeenCalled(); + expect(showReviewOverlay).toHaveBeenCalledWith(true); + }); +}); diff --git a/app/utils/reviews.ts b/app/utils/reviews.ts index ff905a797b1..bd61301eb43 100644 --- a/app/utils/reviews.ts +++ b/app/utils/reviews.ts @@ -1,6 +1,7 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import InAppReview from 'react-native-in-app-review'; + +import {isAvailableAsync} from 'expo-store-review'; import {storeFirstLaunch} from '@actions/app/global'; import LocalConfig from '@assets/config.json'; @@ -22,7 +23,8 @@ export const tryRunAppReview = async (launchType: string, coldStart?: boolean) = return; } - if (!InAppReview.isAvailable()) { + const isAvailable = await isAvailableAsync(); + if (!isAvailable) { return; } diff --git a/app/utils/role/index.test.ts b/app/utils/role/index.test.ts new file mode 100644 index 00000000000..572c35d677e --- /dev/null +++ b/app/utils/role/index.test.ts @@ -0,0 +1,56 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {hasPermission} from '.'; + +import type RoleModel from '@typings/database/models/servers/role'; + +// Mock RoleModel type (simplified version) +const mockRoleModel = (permissions: string[]): RoleModel => ({ + id: 'role-id', + name: 'role-name', + permissions, +} as RoleModel); + +describe('hasPermission', () => { + it('should return false when roles array is empty', () => { + const roles: RoleModel[] = []; + + const result = hasPermission(roles, 'some_permission'); + expect(result).toBe(false); // No roles, no permissions, expect false + }); + + it('should return false when a single role does not have the permission', () => { + const roles: RoleModel[] = [mockRoleModel(['permission_1', 'permission_2'])]; + + const result = hasPermission(roles, 'missing_permission'); + expect(result).toBe(false); // Role does not have 'missing_permission' + }); + + it('should return true when a single role has the permission', () => { + const roles: RoleModel[] = [mockRoleModel(['permission_1', 'permission_2', 'desired_permission'])]; + + const result = hasPermission(roles, 'desired_permission'); + expect(result).toBe(true); // Role has 'desired_permission' + }); + + it('should return false when multiple roles do not have the permission', () => { + const roles: RoleModel[] = [ + mockRoleModel(['permission_1', 'permission_2']), + mockRoleModel(['permission_3', 'permission_4']), + ]; + + const result = hasPermission(roles, 'missing_permission'); + expect(result).toBe(false); // None of the roles have 'missing_permission' + }); + + it('should return true when one of multiple roles has the permission', () => { + const roles: RoleModel[] = [ + mockRoleModel(['permission_1', 'permission_2']), + mockRoleModel(['desired_permission', 'permission_4']), + ]; + + const result = hasPermission(roles, 'desired_permission'); + expect(result).toBe(true); // Second role has 'desired_permission' + }); +}); diff --git a/app/utils/search/index.test.ts b/app/utils/search/index.test.ts new file mode 100644 index 00000000000..057d287eb01 --- /dev/null +++ b/app/utils/search/index.test.ts @@ -0,0 +1,29 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {TabTypes, type TabType} from '.'; + +describe('TabTypes', () => { + it('should create a mirrored object with keys equal to their values', () => { + expect(TabTypes).toEqual({ + MESSAGES: 'MESSAGES', + FILES: 'FILES', + }); + }); + + it('should allow valid keys for TabType', () => { + const validTabType1: TabType = 'MESSAGES'; + const validTabType2: TabType = 'FILES'; + + // Ensure that validTabType1 and validTabType2 match the types in TabTypes + expect(validTabType1).toBe('MESSAGES'); + expect(validTabType2).toBe('FILES'); + }); + + it('should not allow invalid keys for TabType', () => { + // TypeScript will catch this as an error, but we can simulate with a custom runtime check + const invalidTabType = 'INVALID_TAB_TYPE' as TabType; + + expect(TabTypes[invalidTabType]).toBeUndefined(); // Simulate invalid key behavior + }); +}); diff --git a/app/utils/security.test.ts b/app/utils/security.test.ts new file mode 100644 index 00000000000..4653f247ea0 --- /dev/null +++ b/app/utils/security.test.ts @@ -0,0 +1,72 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import CookieManager from '@react-native-cookies/cookies'; + +import {getCSRFFromCookie, urlSafeBase64Encode} from './security'; + +// Mock CookieManager +jest.mock('@react-native-cookies/cookies', () => ({ + get: jest.fn(), +})); + +describe('getCSRFFromCookie function', () => { + afterEach(() => { + jest.clearAllMocks(); // Clear all mock calls after each test + }); + + it('should return MMCSRF value from cookies', async () => { + const url = 'https://example.com'; + const mockCookies = { + MMCSRF: {value: 'mock_CSRF_token'}, + }; + + (CookieManager.get as jest.Mock).mockResolvedValue(mockCookies); + + const result = await getCSRFFromCookie(url); + + expect(CookieManager.get).toHaveBeenCalledWith(url, false); + expect(result).toEqual('mock_CSRF_token'); + }); + + it('should return undefined if MMCSRF value is not found', async () => { + const url = 'https://example.com'; + const mockCookies = {}; + + (CookieManager.get as jest.Mock).mockResolvedValue(mockCookies); + + const result = await getCSRFFromCookie(url); + + expect(CookieManager.get).toHaveBeenCalledWith(url, false); + expect(result).toBeUndefined(); + }); +}); + +describe('urlSafeBase64Encode function', () => { + it('should encode a string to URL-safe Base64', () => { + const input = 'Hello, World!'; + const expectedOutput = 'SGVsbG8sIFdvcmxkIQ=='; + + const result = urlSafeBase64Encode(input); + + expect(result).toEqual(expectedOutput); + }); + + it('should handle special characters in the input string', () => { + const input = 'a+b/c=d'; + const expectedOutput = 'YStiL2M9ZA=='; + + const result = urlSafeBase64Encode(input); + + expect(result).toEqual(expectedOutput); + }); + + it('should handle empty input', () => { + const input = ''; + const expectedOutput = ''; + + const result = urlSafeBase64Encode(input); + + expect(result).toEqual(expectedOutput); + }); +}); diff --git a/app/utils/sentry.test.ts b/app/utils/sentry.test.ts new file mode 100644 index 00000000000..acd5f305d57 --- /dev/null +++ b/app/utils/sentry.test.ts @@ -0,0 +1,265 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +// Import necessary dependencies and functions +import * as Sentry from '@sentry/react-native'; // Importing Sentry as module mock +import {Platform} from 'react-native'; + +import Config from '@assets/config.json'; +import ClientError from '@client/rest/error'; +import DatabaseManager from '@database/manager'; +import {getConfig} from '@queries/servers/system'; +import {getCurrentUser} from '@queries/servers/user'; + +import * as log from './log'; +import {initializeSentry, captureException, captureJSException, addSentryContext} from './sentry'; + +// Mocks +jest.mock('@sentry/react-native', () => ({ + init: jest.fn(), + captureException: jest.fn(), + addBreadcrumb: jest.fn(), + setContext: jest.fn(), + ReactNativeTracing: jest.fn(), + ReactNativeNavigationInstrumentation: jest.fn(), +})); + +jest.mock('@assets/config.json', () => ({ + SentryEnabled: true, + SentryDsnAndroid: 'YOUR_ANDROID_DSN_HERE', + SentryDsnIos: 'YOUR_IOS_DSN_HERE', + SentryOptions: { + severityLevelFilter: ['error', 'warning'], + }, +})); + +jest.mock('./log', () => ({ + logWarning: jest.fn(), + logError: jest.fn(), +})); + +jest.mock('@database/manager', () => ({ + getServerDatabaseAndOperator: jest.fn().mockReturnValue({ + database: {} as any, // Mocking database object + }), +})); + +jest.mock('@queries/servers/system', () => ({ + getConfig: jest.fn().mockResolvedValue({ + BuildDate: '2024-06-24', + BuildEnterpriseReady: true, + BuildHash: 'HASH', + BuildHashEnterprise: 'HASH_ENTERPRISE', + BuildNumber: '1234', + }), +})); + +jest.mock('@queries/servers/user', () => ({ + getCurrentUser: jest.fn().mockResolvedValue({ + id: 'userId', + locale: 'en-US', + roles: ['user'], + }), +})); + +jest.mock('@utils/errors', () => ({ + getFullErrorMessage: jest.fn().mockReturnValue('Full error message'), +})); + +describe('initializeSentry function', () => { + afterEach(() => { + jest.clearAllMocks(); // Clear all mock calls after each test + }); + + it('should not initialize Sentry if SentryEnabled is false', () => { + Config.SentryEnabled = false; + + initializeSentry(); + + expect(Sentry.init).not.toHaveBeenCalled(); + }); + + it('should log a warning if DSN is missing', () => { + Config.SentryEnabled = true; + Config.SentryDsnAndroid = ''; + Config.SentryDsnIos = ''; + + initializeSentry(); + + expect(log.logWarning).toHaveBeenCalledWith('Sentry is enabled, but not configured on this platform'); + }); + + it('should initialize Sentry correctly', () => { + Config.SentryEnabled = true; + Config.SentryDsnAndroid = 'YOUR_ANDROID_DSN_HERE'; + Config.SentryDsnIos = 'YOUR_IOS_DSN_HERE'; + + initializeSentry(); + + expect(Sentry.init).toHaveBeenCalled(); + Platform.OS = 'ios'; + expect(Sentry.init).toHaveBeenCalledWith({ + dsn: 'YOUR_IOS_DSN_HERE', + sendDefaultPii: false, + environment: 'beta', // Assuming isBetaApp() returns true in this test + tracesSampleRate: 1.0, + sampleRate: 1.0, + attachStacktrace: true, // Adjust based on your actual logic + enableCaptureFailedRequests: false, + integrations: [ + expect.any(Sentry.ReactNativeTracing), + ], + beforeSend: expect.any(Function), + }); + + // @ts-expect-error mock not in definition + const beforeSendFn = Sentry.init.mock.calls[0][0].beforeSend; + const event = {level: 'error'}; + const result = beforeSendFn(event as any); // Simulate a call to beforeSend function + + expect(result).toEqual(event); + }); +}); + +describe('captureException function', () => { + afterEach(() => { + jest.clearAllMocks(); // Clear all mock calls after each test + }); + + it('should not capture exception if Sentry is disabled', () => { + Config.SentryEnabled = false; + + captureException(new Error('Test error')); + + expect(Sentry.captureException).not.toHaveBeenCalled(); + }); + + it('should log a warning if error is missing', () => { + Config.SentryEnabled = true; + + captureException(undefined); + + expect(log.logWarning).toHaveBeenCalledWith('captureException called with missing arguments', undefined); + expect(Sentry.captureException).not.toHaveBeenCalled(); + }); + + it('should capture exception correctly', () => { + captureException(new Error('Test error')); + + expect(Sentry.captureException).toHaveBeenCalled(); + expect(Sentry.captureException).toHaveBeenCalledWith(new Error('Test error')); + }); +}); + +describe('captureJSException function', () => { + afterEach(() => { + jest.clearAllMocks(); // Clear all mock calls after each test + }); + + it('should not capture exception if Sentry is disabled', () => { + Config.SentryEnabled = false; + + captureJSException(new Error('Test error'), true); + + expect(Sentry.captureException).not.toHaveBeenCalled(); + }); + + it('should log a warning if error is missing', () => { + Config.SentryEnabled = true; + + captureJSException(undefined, true); + + expect(log.logWarning).toHaveBeenCalledWith('captureJSException called with missing arguments', undefined); + expect(Sentry.captureException).not.toHaveBeenCalled(); + }); + + it('should capture ClientError as breadcrumb', () => { + const errorData: ClientErrorProps = { + url: 'https://example.com', + status_code: 400, + message: 'some error from server', + server_error_id: 'server_error_id', + }; + const clientError = new ClientError('Client error', errorData); + + captureJSException(clientError, true); + + expect(Sentry.addBreadcrumb).toHaveBeenCalled(); + expect(Sentry.addBreadcrumb).toHaveBeenCalledWith({ + category: 'uncaught-app-error', + data: { + isFatal: 'true', + server_error_id: 'server_error_id', + status_code: 400, + }, + level: 'warning', + message: 'Full error message', + }); + }); + + it('should capture other exceptions', () => { + const error = new Error('Test error'); + + captureJSException(error, true); + + expect(Sentry.captureException).toHaveBeenCalled(); + expect(Sentry.captureException).toHaveBeenCalledWith(error); + }); +}); + +describe('addSentryContext function', () => { + afterEach(() => { + jest.clearAllMocks(); // Clear all mock calls after each test + }); + + it('should not add context if Sentry is disabled', async () => { + Config.SentryEnabled = false; + + await addSentryContext('https://example.com'); + + expect(Sentry.setContext).not.toHaveBeenCalled(); + }); + + it('should add user, build, and server context', async () => { + Config.SentryEnabled = true; + + await addSentryContext('https://example.com'); + + expect(DatabaseManager.getServerDatabaseAndOperator).toHaveBeenCalledWith('https://example.com'); + expect(getCurrentUser).toHaveBeenCalled(); + expect(getConfig).toHaveBeenCalled(); + expect(Sentry.setContext).toHaveBeenCalledWith('User-Information', { + userID: 'userId', + email: '', + username: '', + locale: 'en-US', + roles: ['user'], + }); + expect(Sentry.setContext).toHaveBeenCalledWith('App-Build Information', { + serverBuildHash: 'HASH', + serverBuildNumber: '1234', + }); + expect(Sentry.setContext).toHaveBeenCalledWith('Server-Information', { + config: { + BuildDate: '2024-06-24', + BuildEnterpriseReady: true, + BuildHash: 'HASH', + BuildHashEnterprise: 'HASH_ENTERPRISE', + BuildNumber: '1234', + }, + currentChannel: {}, + currentTeam: {}, + }); + }); + + it('should log an error if an exception occurs', async () => { + (DatabaseManager.getServerDatabaseAndOperator as jest.Mock).mockImplementation(() => { + throw new Error('Database error'); + }); + + await addSentryContext('https://example.com'); + + expect(log.logError).toHaveBeenCalledWith('addSentryContext for serverUrl https://example.com', expect.any(Error)); + expect(Sentry.setContext).not.toHaveBeenCalled(); + }); +}); diff --git a/app/utils/strings.test.ts b/app/utils/strings.test.ts new file mode 100644 index 00000000000..ddf094350e2 --- /dev/null +++ b/app/utils/strings.test.ts @@ -0,0 +1,29 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {nonBreakingString} from './strings'; + +describe('nonBreakingString function', () => { + it('should replace space with non-breaking space', () => { + // Test case 1: Replace single space with non-breaking space + const input1 = 'Hello World'; + const expected1 = 'Hello\xa0World'; + expect(nonBreakingString(input1)).toEqual(expected1); + + // Test case 2: Replace multiple spaces with non-breaking spaces + const input2 = 'This is a test string'; + const expected2 = 'This\xa0is\xa0a\xa0test\xa0string'; + expect(nonBreakingString(input2)).toEqual(expected2); + + // Test case 3: No space to replace + const input3 = 'NoSpace'; + const expected3 = 'NoSpace'; + expect(nonBreakingString(input3)).toEqual(expected3); + }); + + it('should handle empty string', () => { + const input = ''; + const expected = ''; + expect(nonBreakingString(input)).toEqual(expected); + }); +}); diff --git a/app/utils/strings.ts b/app/utils/strings.ts index 610ba377189..5b25a773722 100644 --- a/app/utils/strings.ts +++ b/app/utils/strings.ts @@ -2,5 +2,5 @@ // See LICENSE.txt for license information. export function nonBreakingString(s: string) { - return s.replace(' ', '\xa0'); + return s.replace(/ /g, '\xa0'); } diff --git a/app/utils/timezone.test.ts b/app/utils/timezone.test.ts new file mode 100644 index 00000000000..befa0d43379 --- /dev/null +++ b/app/utils/timezone.test.ts @@ -0,0 +1,32 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {getTimeZone} from 'react-native-localize'; + +import {getDeviceTimezone} from './timezone'; + +// Mocking react-native-localize getTimeZone function +jest.mock('react-native-localize', () => ({ + getTimeZone: jest.fn(), +})); + +describe('getDeviceTimezone function', () => { + afterEach(() => { + jest.clearAllMocks(); // Clear all mock calls after each test + }); + + it('should return the device timezone', () => { + // Mock getTimeZone to return a specific timezone + const mockTimeZone = 'America/New_York'; + (getTimeZone as jest.Mock).mockReturnValue(mockTimeZone); + + // Call the function + const result = getDeviceTimezone(); + + // Expect getTimeZone to have been called once + expect(getTimeZone).toHaveBeenCalledTimes(1); + + // Expect the result to be the mocked timezone + expect(result).toEqual(mockTimeZone); + }); +}); diff --git a/app/utils/typography.test.ts b/app/utils/typography.test.ts new file mode 100644 index 00000000000..818da762abe --- /dev/null +++ b/app/utils/typography.test.ts @@ -0,0 +1,126 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {typography, type FontSizes, type FontStyles, type FontTypes} from './typography'; + +describe('Typography', () => { + const testCases: Array<[FontTypes, FontSizes, FontStyles | undefined, string]> = [ + ['Heading', 1200, 'SemiBold', 'Metropolis-SemiBold'], + ['Heading', 1000, 'Regular', 'Metropolis'], + ['Heading', 900, 'Regular', 'Metropolis'], + ['Heading', 800, 'Light', 'Metropolis-Light'], + ['Heading', 700, 'Regular', 'Metropolis'], + ['Heading', 600, 'Regular', 'Metropolis'], + ['Heading', 600, undefined, 'Metropolis-SemiBold'], + ['Body', 500, 'Regular', 'OpenSans'], + ['Body', 400, 'Regular', 'OpenSans'], + ['Body', 300, 'Light', 'OpenSans-Light'], + ['Body', 200, 'SemiBold', 'OpenSans-SemiBold'], + ['Body', 100, 'Light', 'OpenSans-Light'], + ['Body', 75, 'Regular', 'OpenSans'], + ['Body', 50, 'Regular', 'OpenSans'], + ['Body', 25, 'Light', 'OpenSans-Light'], + ['Body', 25, undefined, 'OpenSans'], + ]; + + testCases.forEach(([type, size, style, expectedFontFamily]) => { + it(`returns correct typography for type: ${type}, size: ${size}, style: ${style}`, () => { + const result = typography(type, size, style); + expect(result).toBeDefined(); + expect(result.fontFamily).toBe(expectedFontFamily); + + switch (size) { + case 1200: + expect(result.fontSize).toBe(66); + expect(result.lineHeight).toBe(48); + expect(result.letterSpacing).toBe(-0.02); + break; + case 1000: + expect(result.fontSize).toBe(40); + expect(result.lineHeight).toBe(48); + expect(result.letterSpacing).toBe(-0.02); + break; + case 900: + expect(result.fontSize).toBe(36); + expect(result.lineHeight).toBe(44); + expect(result.letterSpacing).toBe(-0.02); + break; + case 800: + expect(result.fontSize).toBe(32); + expect(result.lineHeight).toBe(40); + expect(result.letterSpacing).toBe(-0.01); + break; + case 700: + expect(result.fontSize).toBe(28); + expect(result.lineHeight).toBe(36); + expect(result.letterSpacing).toBeUndefined(); + break; + case 600: + expect(result.fontSize).toBe(25); + expect(result.lineHeight).toBe(30); + expect(result.letterSpacing).toBeUndefined(); + break; + case 500: + expect(result.fontSize).toBe(22); + expect(result.lineHeight).toBe(28); + expect(result.letterSpacing).toBeUndefined(); + break; + case 400: + expect(result.fontSize).toBe(20); + expect(result.lineHeight).toBe(28); + expect(result.letterSpacing).toBeUndefined(); + break; + case 300: + expect(result.fontSize).toBe(18); + expect(result.lineHeight).toBe(24); + expect(result.letterSpacing).toBeUndefined(); + break; + case 200: + expect(result.fontSize).toBe(16); + expect(result.lineHeight).toBe(24); + expect(result.letterSpacing).toBeUndefined(); + break; + case 100: + expect(result.fontSize).toBe(14); + expect(result.lineHeight).toBe(20); + expect(result.letterSpacing).toBeUndefined(); + break; + case 75: + expect(result.fontSize).toBe(12); + expect(result.lineHeight).toBe(16); + expect(result.letterSpacing).toBeUndefined(); + break; + case 50: + expect(result.fontSize).toBe(11); + expect(result.lineHeight).toBe(16); + expect(result.letterSpacing).toBeUndefined(); + break; + case 25: + expect(result.fontSize).toBe(10); + expect(result.lineHeight).toBe(16); + expect(result.letterSpacing).toBeUndefined(); + break; + default: + throw new Error(`Unexpected font size: ${size}`); + } + + switch (style) { + case 'SemiBold': + expect(result.fontWeight).toBe('600'); + break; + case 'Regular': + expect(result.fontWeight).toBe('400'); + break; + case 'Light': + expect(result.fontWeight).toBe('300'); + break; + default: + if (type === 'Heading') { + expect(result.fontWeight).toBe('600'); + } else { + expect(result.fontWeight).toBe('400'); + } + } + }); + }); +}); diff --git a/app/utils/typography.ts b/app/utils/typography.ts index 3e3dc036f7b..0de41c9bb28 100644 --- a/app/utils/typography.ts +++ b/app/utils/typography.ts @@ -4,9 +4,9 @@ import {StyleSheet, type TextStyle} from 'react-native'; // type FontFamilies = 'OpenSans' | 'Metropolis'; -type FontTypes = 'Heading' | 'Body'; -type FontStyles = 'SemiBold' | 'Regular' | 'Light'; -type FontSizes = 25 | 50 | 75 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 1000 | 1200; +export type FontTypes = 'Heading' | 'Body'; +export type FontStyles = 'SemiBold' | 'Regular' | 'Light'; +export type FontSizes = 25 | 50 | 75 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 1000 | 1200; const fontFamily = StyleSheet.create({ OpenSans: { diff --git a/app/utils/url/index.ts b/app/utils/url/index.ts index 52d4086c71a..def29fcbe4d 100644 --- a/app/utils/url/index.ts +++ b/app/utils/url/index.ts @@ -20,7 +20,7 @@ export function isValidUrl(url = '') { export function sanitizeUrl(url: string, useHttp = false) { let preUrl = urlParse(url, true); - let protocol = preUrl.protocol; + let protocol = useHttp ? 'http:' : preUrl.protocol; if (!preUrl.host || preUrl.protocol === 'file:') { preUrl = urlParse('https://' + stripTrailingSlashes(url), true); @@ -37,6 +37,18 @@ export function sanitizeUrl(url: string, useHttp = false) { ); } +export async function getUrlAfterRedirect(url: string, useHttp = false) { + const link = sanitizeUrl(url, useHttp); + try { + const result = await fetch(link, { + method: 'HEAD', + }); + return {url: result.url}; + } catch (error) { + return {error}; + } +} + export async function getServerUrlAfterRedirect(serverUrl: string, useHttp = false) { let url = sanitizeUrl(serverUrl, useHttp); diff --git a/app/utils/url/test.ts b/app/utils/url/test.ts index ba78b5a0c49..bdb16205a7e 100644 --- a/app/utils/url/test.ts +++ b/app/utils/url/test.ts @@ -437,7 +437,8 @@ describe('UrlUtils', () => { const onError = jest.fn(); const onSuccess = jest.fn(); - await UrlUtils.tryOpenURL(url, onError, onSuccess); + UrlUtils.tryOpenURL(url, onError, onSuccess); + await TestHelper.wait(100); expect(onError).not.toHaveBeenCalled(); expect(onSuccess).toHaveBeenCalledTimes(1); }); diff --git a/app/utils/user/index.ts b/app/utils/user/index.ts index a97173071a2..a2a995fe211 100644 --- a/app/utils/user/index.ts +++ b/app/utils/user/index.ts @@ -5,6 +5,7 @@ import moment from 'moment-timezone'; import {Alert} from 'react-native'; import {General, Permissions, Preferences} from '@constants'; +import {Ringtone} from '@constants/calls'; import {CustomStatusDurationEnum} from '@constants/custom_status'; import {DEFAULT_LOCALE, getLocalizedMessage, t} from '@i18n'; import {toTitleCase} from '@utils/helpers'; @@ -339,6 +340,10 @@ export function getNotificationProps(user?: UserModel) { push_status: 'online', push_threads: 'all', email_threads: 'all', + calls_desktop_sound: 'true', + calls_notification_sound: Ringtone.Calm, + calls_mobile_sound: '', + calls_mobile_notification_sound: '', }; return props; diff --git a/assets/base/config.json b/assets/base/config.json index 67ea1767da1..d5a44b4cc4c 100644 --- a/assets/base/config.json +++ b/assets/base/config.json @@ -1,4 +1,6 @@ { + "AuthUrlScheme": "mmauth://", + "AuthUrlSchemeDev": "mmauthbeta://", "DefaultServerUrl": "", "DefaultServerName": "", "TestServerUrl": "http://localhost:8065", diff --git a/assets/base/i18n/ar.json b/assets/base/i18n/ar.json index 723c4b5c039..fc552a2f202 100644 --- a/assets/base/i18n/ar.json +++ b/assets/base/i18n/ar.json @@ -1,9 +1,24 @@ { "about.date": "تاريخ الاصدار:", + "about.enterpriseEditionLearn": "اعرف المزيد حول نسخة المؤسسات ", + "about.enterpriseEditionSt": "اتصلات حديثة من خلف جدار الحماية الخاص بك.", "about.enterpriseEditione1": "النسخة المؤسسية", + "about.teamEditionLearn": "انضم الى مجتمع ماترموست من خلال", + "about.teamEditionSt": "كل محادثات فريقك فى مكان واحد, بحث فورى وتستطيع الوصول له من اى مكان.", "about.teamEditiont0": "النسخة المحددة للفريق", "about.teamEditiont1": "النسخة المؤسسية", "account.logout": "تسجيل الخروج", "account.logout_from": "تسجيل الخروج من {serverName}", - "account.settings": "الاعدادات" + "account.settings": "الاعدادات", + "account.your_profile": "ملفك الشخصي", + "alert.channel_deleted.description": "تم أرشفة القناة {displayName}.", + "alert.channel_deleted.title": "قناة مؤرشفة", + "alert.push_proxy.button": "حسنا", + "alert.push_proxy_error.description": "بناء على اعدادات هذا السيرفر لا يمكن ارسال اشعارات عبر تطبيق الهاتف. تواصل مع مدير السيرفر للمزيد من المعلومات.", + "alert.push_proxy_error.title": "لا يمكن استقبال اشعارات من هذا الخادم", + "alert.push_proxy_unknown.description": "الخادم غير قادر على استقبال الاشعارات لسبب غير معروف. سيتم المحاولة مرة اخرى فالمرة القادمة التى تتصل بها بالخادم.", + "alert.push_proxy_unknown.title": "لا يمكن استلام اشعارات من الخادم", + "alert.removed_from_channel.description": "لقد تمت إذالتك من القناة {displayName}.", + "alert.removed_from_channel.title": "تمت إذالته من القناة", + "alert.removed_from_team.description": "تمت إذالتك من الفريق {displayName}." } diff --git a/assets/base/i18n/be.json b/assets/base/i18n/be.json index 36c3e6d412e..c8c6d682c8e 100644 --- a/assets/base/i18n/be.json +++ b/assets/base/i18n/be.json @@ -265,9 +265,6 @@ "mobile.message_length.message_split_left": "Паведамленне перавышае ліміт знакаў", "mobile.message_length.title": "Даўжыня паведамлення", "mobile.oauth.failed_to_login": "Ваша спроба ўваходу не ўдалася. Калі ласка, паспрабуйце яшчэ раз.", - "mobile.oauth.failed_to_open_link": "Спасылка не адкрылася. Калі ласка, паспрабуйце яшчэ раз.", - "mobile.oauth.failed_to_open_link_no_browser": "Спасылка не адкрылася. Калі ласка, праверце, ці ўсталяваны браўзэр у бягучай прасторы.", - "mobile.oauth.something_wrong": "Нешта пайшло не так", "mobile.oauth.switch_to_browser": "Калі ласка, выкарыстайце ваш браўзэр для завяршэння працэсу ўваходу ў сістэму.", "mobile.oauth.try_again": "Паспрабаваць яшчэ", "mobile.open_dm.error": "Мы не можам адкрыць асабістыя паведамленні з {displayName}. Калі ласка, праверце злучэнне і паспрабуйце зноў.", diff --git a/assets/base/i18n/bg.json b/assets/base/i18n/bg.json index 84e30ac74dc..c0f12793e89 100644 --- a/assets/base/i18n/bg.json +++ b/assets/base/i18n/bg.json @@ -397,7 +397,6 @@ "mobile.calls_call_ended": "", "mobile.calls_call_screen": "", "mobile.calls_call_thread": "", - "mobile.calls_current_call": "", "mobile.calls_disable": "", "mobile.calls_dismiss": "", "mobile.calls_enable": "", @@ -428,7 +427,6 @@ "mobile.calls_mic_error": "", "mobile.calls_more": "", "mobile.calls_mute": "", - "mobile.calls_name_started_call": "", "mobile.calls_noone_talking": "", "mobile.calls_not_available_msg": "", "mobile.calls_not_available_option": "", @@ -442,7 +440,6 @@ "mobile.calls_participant_rec_title": "", "mobile.calls_raise_hand": "", "mobile.calls_react": "", - "mobile.calls_rec": "", "mobile.calls_record": "", "mobile.calls_recording_start_in_progress": "", "mobile.calls_recording_start_no_permissions": "", @@ -526,7 +523,6 @@ "mobile.login_options.google": "", "mobile.login_options.heading": "", "mobile.login_options.none": "", - "mobile.login_options.office365": "", "mobile.login_options.openid": "", "mobile.login_options.saml": "", "mobile.login_options.select_option": "", @@ -548,8 +544,6 @@ "mobile.managed.blocked_by": "Блокиран от {vendor}", "mobile.managed.exit": "Изход", "mobile.managed.jailbreak": "{Vendor} не се доверява на Jailbroken устройства, моля излезте от приложението.", - "mobile.managed.jailbreak_no_debug_info": "", - "mobile.managed.jailbreak_no_reason": "", "mobile.managed.not_secured.android": "Това устройство трябва да бъде защитено със заключване на екрана, за да се използва Mattermost.", "mobile.managed.not_secured.ios": "Това устройство трябва да бъде защитено с парола за използване на Mattermost.\n\nОтидете в Настройки> лицево ID и парола.", "mobile.managed.not_secured.ios.touchId": "Това устройство трябва да бъде защитено с парола за използване на Mattermost.\n\nОтидете в Настройки> докосване ID и парола.", @@ -568,9 +562,6 @@ "mobile.no_results_with_term.files": "", "mobile.no_results_with_term.messages": "", "mobile.oauth.failed_to_login": "Опитът ви за влизане е неуспешен. Моля, опитайте отново.", - "mobile.oauth.failed_to_open_link": "Неуспешно отваряне на връзка. Моля, опитайте отново.", - "mobile.oauth.failed_to_open_link_no_browser": "", - "mobile.oauth.something_wrong": "Нещо се обърка", "mobile.oauth.something_wrong.okButton": "", "mobile.oauth.switch_to_browser": "", "mobile.oauth.switch_to_browser.error_title": "", diff --git a/assets/base/i18n/cs.json b/assets/base/i18n/cs.json index 11f18d248ba..5d5d8cc3e30 100644 --- a/assets/base/i18n/cs.json +++ b/assets/base/i18n/cs.json @@ -15,119 +15,266 @@ "account.your_profile": "Váš profil", "alert.channel_deleted.description": "Kanál {displayName} byl archivován.", "alert.channel_deleted.title": "Archivovaný kanál", + "alert.push_proxy.button": "V pořádku", "alert.push_proxy_error.description": "Z důvodu nastavení tohoto serveru nelze příjmat notifikace do mobilní aplikace. Kontaktujte Vašeho správce serveru.", "alert.push_proxy_error.title": "Z toho serveru nelze obdržet notifikace", + "alert.push_proxy_unknown.description": "Tento server nebyl schopen přijmout push notifikace z neznámého důvodu. Pokus o přijetí bude opakován při příštím připojení.", + "alert.push_proxy_unknown.title": "Notifikace z tohoto serveru nemohly být přijaty", + "alert.removed_from_channel.description": "Byli jste odstraněni z kanálu {displayName}.", + "alert.removed_from_channel.title": "Odstraněn z kanálu", + "alert.removed_from_team.description": "Byli jste odstraněni z týmu {displayName}.", + "alert.removed_from_team.title": "Odstraněn z týmu", + "announcment_banner.dismiss": "Zrušit oznámení", + "announcment_banner.okay": "Dobře", "api.channel.add_guest.added": "{addedUsername} přidán do kanálu jako host uživatelem {username}.", "api.channel.add_member.added": "{addedUsername} přidán uživatelem {username}.", "api.channel.guest_join_channel.post_and_forget": "{username} se přidal ke kanálu jako host.", "apps.error": "Chyba: {error}", "apps.error.command.field_missing": "Požadované pole chybí: `{fieldName}`.", - "apps.error.command.same_channel": "Opakování kanálu pro pole `{fieldName}`: `{option}`.", - "apps.error.command.same_option": "Opakování kanálu pro pole `{fieldName}`: `{option}`.", - "apps.error.command.same_user": "Opakování kanálu pro pole `{fieldName}`: `{option}`.", - "apps.error.command.unknown_channel": "Opakování kanálu pro pole `{fieldName}`: `{option}`.", - "apps.error.command.unknown_option": "Opakování kanálu pro pole `{fieldName}`: `{option}`.", + "apps.error.command.same_channel": "Kanál byl opakovaně použit pro pole `{fieldName}`:`{option}`.", + "apps.error.command.same_option": "Možnost byla opakovaně použita pro pole `{fieldName}`:`{option}`.", + "apps.error.command.same_user": "Uživatel byl opakovaně použit pro pole `{fieldName}`:`{option}`.", + "apps.error.command.unknown_channel": "Neznámý kanál pro pole `{fieldName}`: `{option}`.", + "apps.error.command.unknown_option": "Neznámá možnost pro pole`{fieldName}` : `{option}`.", "apps.error.command.unknown_user": "Neznámý uživatel pro pole `{fieldName}`: `{option}`.", "apps.error.form.no_form": "`form` není definované.", "apps.error.form.no_lookup": "`lookup` není definovaný.", "apps.error.form.no_source": "`source` není definovaný.", "apps.error.form.no_submit": "`submit` není definovaný", "apps.error.form.refresh": "Nastala chyba při získávání vybraných polí. Kontaktujte vývojáře aplikace. Detaily: {details}", - "apps.error.form.refresh_no_refresh": "Zavolaná obnova na poli které se neobnovuje.", - "apps.error.form.submit.pretext": "Nastala chyba při získávání vybraných polí. Kontaktujte vývojáře aplikace. Detaily: {details}", + "apps.error.form.refresh_no_refresh": "Byla volána aktualizace na poli, které nepodporuje aktualizaci.", + "apps.error.form.submit.pretext": "Došlo k chybě při odesílání modálního okna. Kontaktujte vývojáře aplikace. Podrobnosti: {details}", "apps.error.lookup.error_preparing_request": "Chyba při přípravě vyhledávacího požadavku: {errorMessage}", - "apps.error.malformed_binding": "Toto napojení není správně naformátováno. Kontaktujte vývojáře aplikace.", - "apps.error.parser": "Chyba parsování: {error}", + "apps.error.malformed_binding": "Tato vazba není správně vytvořena. Kontaktujte vývojáře aplikace.", + "apps.error.parser": "Chyba při analýze: {error}", "apps.error.parser.empty_value": "Prázdné hodnoty nejsou povolené.", "apps.error.parser.execute_non_leaf": "Musíte vybrat podpříkaz.", - "apps.error.parser.missing_binding": "Chybí spojení příkazu.", - "apps.error.parser.missing_field_value": "Pole není vyplněno.", - "apps.error.parser.missing_list_end": "Očekáván token pro uzavření seznamu.", - "apps.error.parser.missing_quote": "Odpovídající úvozovka očekávaná před koncem vstupu.", - "apps.error.parser.missing_source": "Formulář nemá odeslat ani zdroj.", + "apps.error.parser.missing_binding": "Chybí vazby příkazu.", + "apps.error.parser.missing_field_value": "Chybí hodnota pole.", + "apps.error.parser.missing_list_end": "Očekávaný ukončovací token seznamu.", + "apps.error.parser.missing_quote": "Odpovídající uvozovka očekávaná před koncem vstupu.", + "apps.error.parser.missing_source": "Formulář nemá žádné tlačítko pro odeslání ani zdroj.", "apps.error.parser.missing_submit": "Chybí volání odeslání (submit) ve spojení nebo formuláři.", - "apps.error.parser.missing_tick": "Odpovídající jednoduchá úvozovka očekávaná před koncem vstupu.", + "apps.error.parser.missing_tick": "Odpovídající jednoduchá uvozovka očekávaná před koncem vstupu.", "apps.error.parser.multiple_equal": "Vícero `=` znaků není povoleno.", - "apps.error.parser.no_argument_pos_x": "Argument nebyl identifikován.", - "apps.error.parser.no_bindings": "Žádné napojení příkazu.", - "apps.error.parser.no_form": "Nenalezen formulář.", + "apps.error.parser.no_argument_pos_x": "Nelze identifikovat argument.", + "apps.error.parser.no_bindings": "Žádné vazby příkazu.", + "apps.error.parser.no_form": "Žádný formulář nenalezen.", "apps.error.parser.no_match": "`{command}`: Žádný odpovídající příkaz nebyl nalezen v tomto pracovním prostředí.", - "apps.error.parser.no_slash_start": "Příkaz musí začínat `/`.", + "apps.error.parser.no_slash_start": "Příkaz musí začínat na `/`.", "apps.error.parser.unexpected_character": "Neočekávaný znak.", "apps.error.parser.unexpected_comma": "Neočekávaná čárka.", "apps.error.parser.unexpected_error": "Neočekávaná chyba.", - "apps.error.parser.unexpected_flag": "Příkaz neakceptuje značku `{flagName}`.", - "apps.error.parser.unexpected_squared_bracket": "Neočekávaný začátek seznamu.", + "apps.error.parser.unexpected_flag": "Příkaz nepřijímá příznak {flagName}.", + "apps.error.parser.unexpected_squared_bracket": "Nečekané otevření seznamu.", "apps.error.parser.unexpected_state": "Nedostupný: Neočekávaný stav v matchBinding: `{state}`.", - "apps.error.parser.unexpected_whitespace": "Nedostupný: Neočekávaný bílý znak.", - "apps.error.responses.form.no_form": "Typ odpovědi je `form`, ale žádný formulár nebyl zahrnut do odpovědi.", - "apps.error.responses.navigate.no_url": "Typ odpovědi je `form`, ale žádný formulár nebyl zahrnut do odpovědi.", - "apps.error.responses.unexpected_error": "Obdržel jsem neočekávanou chybu.", + "apps.error.parser.unexpected_whitespace": "Nedostupné: Neočekávaný bílý znak.", + "apps.error.responses.form.no_form": "Typ odpovědi je `form`, ale v odpovědi chybí formulář.", + "apps.error.responses.navigate.no_url": "Typ odpovědi je `navigate`, ale v odpovědi chybí URL adresa.", + "apps.error.responses.unexpected_error": "Došlo k nečekané chybě.", "apps.error.responses.unexpected_type": "Typ odpovědi aplikace nebyl očekáván. Typ odpovědi: {type}", - "apps.error.responses.unknown_field_error": "Obdržena chyba pro neznámé pole. Název pole: `{pole}`. Chyba: `{error}`.", - "apps.error.responses.unknown_type": "Typ odpovědi aplikace nebyl očekáván. Typ odpovědi: {type}.", + "apps.error.responses.unknown_field_error": "Došlo k chybě u neznámého pole. Název pole: {field}. Chyba: {error}.", + "apps.error.responses.unknown_type": "Typ odpovědi aplikace není podporován. Typ odpovědi: {type}.", "apps.error.unknown": "Došlo k neznámé chybě.", "apps.suggestion.dynamic.error": "Chyba dynamického výběru", - "apps.suggestion.errors.parser_error": "Chyba parsování", + "apps.suggestion.errors.parser_error": "Chyba při analýze", "apps.suggestion.no_dynamic": "Pro dynamické návrhy nebyly vráceny žádné údaje", "apps.suggestion.no_static": "Žádné odpovídající možnosti.", - "apps.suggestion.no_suggestion": "Žádné odpovídající možnosti.", - "archivedChannelMessage": "Nahlížíš do **archivovaného kanálu**. Nelze sem přidávat nové zprávy.", - "camera_type.photo.option": "Zachycení fotografie", - "camera_type.video.option": "Záznam videa", + "apps.suggestion.no_suggestion": "Žádné shodné návrhy.", + "archivedChannelMessage": "Prohlížíte **archivovaný kanál**. Nelze sem uveřejňovat nové zprávy.", + "autocomplete_selector.unknown_channel": "Neznámý kanál", + "browse_channels.archivedChannels": "Archivované kanály", + "browse_channels.dropdownTitle": "Ukaž", + "browse_channels.noMore": "Žádné další kanály k připojení", + "browse_channels.publicChannels": "Veřejné Kanály", + "browse_channels.sharedChannels": "Sdílené Kanály", + "browse_channels.showArchivedChannels": "Ukaž: Archivované Kanály", + "browse_channels.showPublicChannels": "Ukaž: Veřejné Kanály", + "browse_channels.showSharedChannels": "Ukaž: Sdílené Kanály", + "browse_channels.title": "Procházet kanály", + "camera_type.photo.option": "Pořídit Fotografii", + "camera_type.video.option": "Nahrát video", "center_panel.archived.closeChannel": "Zavřít kanál", + "channel_add_members.add_members.button": "Přidat Členy", + "channel_bookmark.add.detail_title": "Název", + "channel_bookmark.add.emoji": "Přidat emodži", + "channel_bookmark.add.failed_title": "Chyba při přidávání záložky", + "channel_bookmark.add.file_cancel": "Odmítnout", + "channel_bookmark.add.file_title": "Příloha", + "channel_bookmark.add.file_upload_error": "Chyba při nahrávání souboru. Zkuste to prosím znovu.", + "channel_bookmark.add.file_uploading": "Nahrávám...({progress}%)", + "channel_bookmark.add_edit.failed_desc": "Podrobnosti: {error}", + "channel_bookmark.copy_option": "Kopírovat Odkaz", + "channel_bookmark.delete.confirm": "Jste si jisti, že chcete smazat tuhle záložku {displayName}?", + "channel_bookmark.delete.confirm_title": "Smazat záložku", + "channel_bookmark.delete.failed_detail": "Podrobnosti: {error}", + "channel_bookmark.delete.failed_title": "Chyba při odstraňování záložky", + "channel_bookmark.delete.yes": "Ano", + "channel_bookmark.delete_option": "Smazat", + "channel_bookmark.edit.failed_title": "Chyba při úpravě záložky", + "channel_bookmark.edit.save_button": "Uložit", + "channel_bookmark.edit_option": "Upravit", + "channel_bookmark.share_option": "Sdílet", + "channel_bookmark_add.link": "Odkaz", + "channel_bookmark_add.link.input.description": "Přidej odkaz k příspěvku, souboru nebo jakýkoliv externí odkaz", + "channel_bookmark_add.link.invalid": "Prosím vložte platný odkaz", + "channel_files.empty.paragraph": "Soubory zveřejněné v tomto kanálu se zobrazí zde.", + "channel_files.empty.title": "Zatím žádné soubory", + "channel_files.noFiles.paragraph": "Tento kanál neobsahuje žádné soubory se zvolenými filtry", + "channel_files.noFiles.title": "Žádné soubory nenalezeny", "channel_header.directchannel.you": "{displayName} (já)", + "channel_header.info": "Zobraz informace", + "channel_header.member_count": "{count, plural, one {# člen} other {# členové}}", + "channel_info.add_bookmark": "Přidat záložku", + "channel_info.add_bookmark.file": "Přiložit soubor", + "channel_info.add_bookmark.link": "Přidat odkaz", + "channel_info.add_bookmark.max_reached": "Byl dosažen maximální počet záložek v tomto kanálu.", + "channel_info.add_members": "Přidat členy", + "channel_info.alertNo": "Ne", + "channel_info.alertYes": "Ano", + "channel_info.alert_retry": "Zkuste Znovu", + "channel_info.archive": "Archivovat Kanál", + "channel_info.archive_description.can_view_archived": "Tímto se kanál archivuje z týmu. Obsah kanálu bude nadále přístupný jeho členům.\n\nJste si jisti, že chcete archivovat {term} {name}?", + "channel_info.archive_description.cannot_view_archived": "Tímto se kanál archivuje z týmu a odstraní se z uživatelského rozhraní. Archivované kanály lze v případě potřeby znovu aktivovat.\n\nJste si jisti, že chcete archivovat {term} {name}?", + "channel_info.archive_failed": "Při pokusu o archivaci kanálu {displayName} došlo k chybě", + "channel_info.archive_title": "Archiv {term}", + "channel_info.channel_auto_follow_threads": "Sledovat všechny vlákna v tomto kanálu", + "channel_info.channel_auto_follow_threads_failed": "Při pokusu o automatické sledování všech konverzací v kanálu {displayName} došlo k chybě", + "channel_info.channel_files": "Soubory", + "channel_info.close": "Zavřít", + "channel_info.close_dm": "Zavřít přímou zprávu", + "channel_info.close_dm_channel": "Jste si jistí, že chcete tuto přímou zprávu zavřít? Tímto se odstraní z vaší domovské obrazovky, ale můžete ji kdykoli znovu otevřít.", + "channel_info.close_gm": "Zavřít skupinovou zprávu", + "channel_info.close_gm_channel": "Jste si jistý/á, že chcete tuto skupinovou zprávu zavřít? Tímto se odstraní z vaší domovské obrazovky, ale můžete ji kdykoli znovu otevřít.", + "channel_info.convert_failed": "Nepodařilo se nám převést {displayName} na soukromý kanál.", + "channel_info.convert_gm_to_channel": "Převeď na Soukromý Kanál", + "channel_info.convert_gm_to_channel.button_text": "Převeď na Soukromý Kanál", + "channel_info.convert_gm_to_channel.button_text_converting": "Převádím...", + "channel_info.convert_gm_to_channel.conversion_error": "Něco se pokazilo. Nepodařilo se převést Skupinovou Zprávu na Privátní Kanál.", + "channel_info.convert_gm_to_channel.loading.footer": "Načítání podrobností...", + "channel_info.convert_gm_to_channel.screen_title": "Převést na Soukromý Kanál", + "channel_info.convert_gm_to_channel.team_selector_list.title": "Vybrat Tým", + "channel_info.convert_gm_to_channel.warning.body.yourself": "sebe", + "channel_info.convert_gm_to_channel.warning.bodyXXXX": "Chystáte se převést Skupinovou zprávu s {memberNames} na Kanál. Tento krok nelze vrátit zpět.", + "channel_info.convert_gm_to_channel.warning.header": "Historie konverzace bude viditelná všem členům kanálu", + "channel_info.convert_gm_to_channel.warning.no_teams.body": "Skupinovou zprávu nelze převést na kanál, protože členové nejsou součástí stejného týmu. Přidejte všechny členy do jednoho týmu, abyste mohli tuto skupinovou zprávu převést na kanál.", + "channel_info.convert_gm_to_channel.warning.no_teams.header": "Nelze převést na kanál, protože členové skupiny jsou součástí různých týmů", + "channel_info.convert_private": "Konvertovat na soukromý kanál", + "channel_info.convert_private_description": "Když převedete {displayName} na soukromý kanál, historie a členství zůstanou zachovány. Veřejně sdílené soubory zůstanou přístupné každému, kdo má odkaz. Členství v soukromém kanálu je pouze na pozvání.\n\nZměna je trvalá a nevratná.\n\nJste si jisti, že chcete převést {displayName} na soukromý kanál?", + "channel_info.convert_private_success": "{displayName} je teď soukromý kanál.", + "channel_info.convert_private_title": "Převést {displayName} na soukromý kanál?", + "channel_info.copied": "Zkopírováno", + "channel_info.copy_link": "Kopírovat Odkaz", + "channel_info.copy_purpose_text": "Kopírovat text účelu", + "channel_info.custom_status": "Vlastní status:", + "channel_info.edit_header": "Upravit hlavičku", + "channel_info.error_close": "Zavři", + "channel_info.favorite": "Oblíbený", + "channel_info.favorited": "Přidané mezi oblíbené", "channel_info.header": "Hlavička:", + "channel_info.ignore_mentions": "Ignorovat @kanál, @tady, @vše", + "channel_info.leave": "Opustit", + "channel_info.leave_channel": "Opustit kanál", + "channel_info.leave_private_channel": "Jste si jisti, že chcete opustit soukromý kanál {displayName}? Nemůžete se znovu připojit k kanálu, pokud nebudete znovu pozváni.", + "channel_info.leave_public_channel": "Jste si jistí, že chcete opustit veřejný kanál {displayName}? Můžete se kdykoli znovu připojit.", + "channel_info.local_time": "Místní čas", + "channel_info.members": "Členové", + "channel_info.mention": "Zmínka", + "channel_info.mobile_notifications": "Mobilní oznámení", + "channel_info.muted": "Ztlumit", + "channel_info.nickname": "Přezdívka", + "channel_info.notification.all": "Vše", + "channel_info.notification.default": "Výchozí", + "channel_info.notification.mention": "Zmínky", + "channel_info.notification.none": "Nikdy", + "channel_info.pinned_messages": "Připnuté Zprávy", + "channel_info.position": "Pozice", + "channel_info.private_channel": "Soukromý Kanál", + "channel_info.public_channel": "Veřejný Kanál", + "channel_info.send_a_mesasge": "Pošli zprávu", + "channel_info.send_mesasge": "Odeslat zprávu", + "channel_info.set_header": "Nastav Hlavičku", + "channel_info.unarchive": "Obnovit Kanál", + "channel_info.unarchive_description": "Jste si jisti, že chcete obnovit {term} {name}?", + "channel_info.unarchive_failed": "Při obnovování kanálu {displayName} se vyskytla chyba", + "channel_info.unarchive_title": "Obnovit z archivu {term}", + "channel_into.convert_gm_to_channel.team_selector.label": "Tým", + "channel_into.convert_gm_to_channel.team_selector.placeholder": "Vyberte tým", + "channel_intro.createdBy": "Vytvořeno od {user} v {date}", + "channel_intro.createdOn": "Vytvořeno {date}", + "channel_list.channels_category": "Kanály", + "channel_list.dms_category": "Přímé Zprávy", + "channel_list.favorites_category": "Oblíbené položky", + "channel_list.find_channels": "Najít kanály...", "channel_loader.someone": "Někdo", - "channel_modal.descriptionHelp": "Popište, jak by tento kanál měl být použit.", + "channel_modal.descriptionHelp": "Popište, jak by měl být tento kanál používán.", "channel_modal.header": "Hlavička", - "channel_modal.headerEx": "Např.: \"[Titulek odkazu](http://example.com)\"", - "channel_modal.headerHelp": "Nastavit text, který se objeví v záhlaví kanálu vedle názvu kanálu. Například často používané odkazy zadáním [Název Odkazu](http://example.com).", + "channel_modal.headerEx": "Použijte Markdown k formátování textu hlavičky", + "channel_modal.headerHelp": "Nastavit text, který se objeví v záhlaví kanálu vedle názvu kanálu. Například, často používané odkazy zadáním [Název Odkazu](http://example.com).", + "channel_modal.makePrivate.description": "Když je kanál nastaven na soukromý, pouze pozvaní členové týmu mohou tento kanál zobrazit a účastnit se v něm", + "channel_modal.makePrivate.label": "Nastavit jako soukromý", "channel_modal.name": "Jméno", - "channel_modal.nameEx": "Např.: \"Chyby\", \"Marketing\", \"客户支持\"", - "channel_modal.optional": "(nepovinné)", + "channel_modal.nameEx": "Chyby, Marketing", + "channel_modal.optional": "(volitelné)", "channel_modal.purpose": "Účel", - "channel_modal.purposeEx": "Např.: \"Kanál pro hlášení chyb a navrhů vylepšení\"", - "combined_system_message.added_to_channel.many_expanded": "{users} a {lastUser} byli **přidáni** uživatelem {actor}.", - "combined_system_message.added_to_channel.one": "{firstUser} **přidán** uživatelem {actor}.", - "combined_system_message.added_to_channel.one_you": "Uživatel {actor} tě **přidal**.", - "combined_system_message.added_to_channel.two": "{firstUser} a {secondUser} **přidáni** uživatelem {actor}.", - "combined_system_message.added_to_team.many_expanded": "{users} a {lastUser} byli **přidáno do týmu** uživatelem {actor}.", + "channel_modal.purposeEx": "Kanál pro hlášení chyb a návrhů na zlepšení", + "channel_notification_preferences.default": "(výchozí)", + "channel_notification_preferences.muted_content": "Můžete změnit nastavení oznámení, ale nebudete dostávat žádná oznámení, dokud bude kanál ztlumen.", + "channel_notification_preferences.muted_title": "Tento kanál je ztlumen", + "channel_notification_preferences.notification.all": "Všechny nové zprávy", + "channel_notification_preferences.notification.mention": "Pouze zmínky", + "channel_notification_preferences.notification.none": "Nic", + "channel_notification_preferences.notification.thread_replies": "Upozornit mě na odpovědi na vlákna, která sleduji v tomto kanálu", + "channel_notification_preferences.notify_about": "Upozornit mě na...", + "channel_notification_preferences.reset_default": "Obnovit na výchozí nastavení", + "channel_notification_preferences.thread_replies": "Odpovědi na vlákna", + "channel_notification_preferences.unmute_content": "Zrušit ztlumení Kanálu", + "combined_system_message.added_to_channel.many_expanded": "{users} a {lastUser} byli **přidáni do kanálu** uživatelem {actor}.", + "combined_system_message.added_to_channel.one": "{firstUser} **přidán do kanálu** uživatelem {actor}.", + "combined_system_message.added_to_channel.one_you": "Uživatel {actor} vás **přidal do kanálu**.", + "combined_system_message.added_to_channel.two": "{firstUser} a {secondUser} **přidáni do kanálu** uživatelem {actor}.", + "combined_system_message.added_to_team.many_expanded": "{users} a {lastUser} byli **přidáni do týmu** uživatelem {actor}.", "combined_system_message.added_to_team.one": "{firstUser} **přidán do týmu** uživatelem {actor}.", - "combined_system_message.added_to_team.one_you": "Uživatel {actor} tě **přidal to týmu**.", - "combined_system_message.added_to_team.two": "{firstUser} a {secondUser} **přidáno do týmu** uživatelem {actor}.", - "combined_system_message.joined_channel.many_expanded": "{users} a {lastUser} **vstoupili do kanálu**.", - "combined_system_message.joined_channel.one": "{firstUser} **vstoupil(a) do kanálu**.", - "combined_system_message.joined_channel.one_you": "**se připojil na kanál**.", - "combined_system_message.joined_channel.two": "{firstUser} a {secondUser} **vstoupili do kanálu**.", - "combined_system_message.joined_team.many_expanded": "{users} a {lastUser} **vstoupili do týmu**.", - "combined_system_message.joined_team.one": "{firstUser} **vstoupil(a) do týmu**.", - "combined_system_message.joined_team.one_you": "Vy **jste se přidal/a k týmu**.", - "combined_system_message.joined_team.two": "{firstUser} a {secondUser} **vstoupili do týmu**.", + "combined_system_message.added_to_team.one_you": "Uživatel {actor} vás **přidal to týmu**.", + "combined_system_message.added_to_team.two": "{firstUser} a {secondUser} **přidáni do týmu** uživatelem {actor}.", + "combined_system_message.joined_channel.many_expanded": "{users} a {lastUser} **se připojili do kanálu**.", + "combined_system_message.joined_channel.one": "{firstUser} **se připojil do kanálu**.", + "combined_system_message.joined_channel.one_you": "**Připojili jste se do kanálu**.", + "combined_system_message.joined_channel.two": "{firstUser} a {secondUser} **se připojili do kanálu**.", + "combined_system_message.joined_team.many_expanded": "{users} a {lastUser} **se připojili k týmu**.", + "combined_system_message.joined_team.one": "{firstUser} **se připojil k týmu**.", + "combined_system_message.joined_team.one_you": "Vy **jste se připojil k týmu**.", + "combined_system_message.joined_team.two": "{firstUser} a {secondUser} **se připojili k týmu**.", "combined_system_message.left_channel.many_expanded": "{users} a {lastUser} **opustili kanál**.", - "combined_system_message.left_channel.one": "{firstUser} **opustil(a) kanál**.", - "combined_system_message.left_channel.one_you": "**odešel z kanálu**.", + "combined_system_message.left_channel.one": "{firstUser} **opustil kanál**.", + "combined_system_message.left_channel.one_you": "**Opustili jste kanál.**.", "combined_system_message.left_channel.two": "{firstUser} a {secondUser} **opustili kanál**.", "combined_system_message.left_team.many_expanded": "{users} a {lastUser} **opustili tým**.", "combined_system_message.left_team.one": "{firstUser} **opustil(a) tým**.", - "combined_system_message.left_team.one_you": "**odešel z týmu**.", + "combined_system_message.left_team.one_you": "**Opustili jste tým**.", "combined_system_message.left_team.two": "{firstUser} a {secondUser} **opustili tým**.", "combined_system_message.removed_from_channel.many_expanded": "{users} a {lastUser} byli **odstraněni z kanálu**.", - "combined_system_message.removed_from_channel.one": "{firstUser} byl(a) **odstraněn(a) z kanálu**.", - "combined_system_message.removed_from_channel.one_you": "byli **odebráni z kanálu**.", + "combined_system_message.removed_from_channel.one": "{firstUser} byl **odstraněn z kanálu**.", + "combined_system_message.removed_from_channel.one_you": "**Byli jste odstraněni z kanálu**.", "combined_system_message.removed_from_channel.two": "{firstUser} a {secondUser} byli **odstraněni z kanálu**.", "combined_system_message.removed_from_team.many_expanded": "{users} a {lastUser} byli **odstraněni z týmu**.", "combined_system_message.removed_from_team.one": "{firstUser} byl(a) **odstraněn(a) z týmu**.", "combined_system_message.removed_from_team.one_you": "Byl jste **odebrán z týmu**.", "combined_system_message.removed_from_team.two": "{firstUser} aad {secondUser} byli **odstraněni z týmu**.", - "combined_system_message.you": "Váš", - "create_post.deactivated": "Díváš se na archivovaný kanál s deaktivovaným uiživatelem.", + "combined_system_message.you": "Vy", + "connection_banner.connected": "Spojení obnoveno", + "connection_banner.connecting": "Připojuji...", + "connection_banner.not_connected": "Bez připojení k internetu", + "connection_banner.not_reachable": "Server je nedostupný", + "create_direct_message.title": "Vytvoř Přímou Zprávu", + "create_post.deactivated": "Prohlížíte archivovaný kanál s deaktivovaným uživatelem.", + "create_post.thread_reply": "Odpovědět na toto vlákno...", "create_post.write": "Napsat do {channelDisplayName}", - "custom_status.expiry.at": "na adrese", - "custom_status.expiry.until": "Až do", + "custom_status.expiry.at": "na", + "custom_status.expiry.until": "Dokud", "custom_status.expiry_dropdown.custom": "Vlastní", "custom_status.expiry_dropdown.date_and_time": "Datum a čas", - "custom_status.expiry_dropdown.dont_clear": "Nemažte", + "custom_status.expiry_dropdown.dont_clear": "Neodstranit", "custom_status.expiry_dropdown.four_hours": "4 hodiny", "custom_status.expiry_dropdown.one_hour": "1 hodina", "custom_status.expiry_dropdown.thirty_minutes": "30 minut", @@ -136,152 +283,440 @@ "custom_status.expiry_time.today": "Dnes", "custom_status.expiry_time.tomorrow": "Zítra", "custom_status.failure_message": "Nepodařilo se aktualizovat stav. Zkuste to znovu", - "custom_status.set_status": "Nastavení stavu", + "custom_status.set_status": "Nastavit vlastní status", "custom_status.suggestions.in_a_meeting": "Na schůzce", "custom_status.suggestions.on_a_vacation": "Na dovolené", - "custom_status.suggestions.out_for_lunch": "Na oběd venku", - "custom_status.suggestions.out_sick": "Venku nemocný", - "custom_status.suggestions.recent_title": "Obdrženo", - "custom_status.suggestions.title": "NÁVRHY", - "custom_status.suggestions.working_from_home": "Práce z domova", + "custom_status.suggestions.out_for_lunch": "Na obědě", + "custom_status.suggestions.out_sick": "Nemocný", + "custom_status.suggestions.recent_title": "Nedávné", + "custom_status.suggestions.title": "Návrhy", + "custom_status.suggestions.working_from_home": "Pracuji z domova", "date_separator.today": "Dnes", "date_separator.yesterday": "Včera", + "default_skin_tone": "Výchozí barva vzhledu", + "display_settings.clock.military": "24-hodin", + "display_settings.clock.standard": "12-hodin", + "display_settings.clockDisplay": "Zobrazení hodin", + "display_settings.crt": "Sbalená vlákna odpovědí", + "display_settings.crt.off": "Vypnout", + "display_settings.crt.on": "Zapnout", + "display_settings.theme": "Téma", + "display_settings.timezone": "Časové pásmo", + "display_settings.tz.auto": "Auto", + "display_settings.tz.manual": "Manuální", + "download.error": "Nelze stáhnout soubor. Zkuste to znovu později", "edit_post.editPost": "Upravit příspěvek...", "edit_post.save": "Uložit", + "edit_server.description": "Uveďte zobrazovaný název pro tento server", + "edit_server.display_help": "Server:{url}", + "edit_server.save": "Uložit", + "edit_server.saving": "Ukládám", + "edit_server.title": "Uprav název serveru", "emoji_picker.activities": "Aktivity", "emoji_picker.animals-nature": "Zvířata a příroda", "emoji_picker.custom": "Vlastní", - "emoji_picker.flags": "Příznak", + "emoji_picker.flags": "Příznaky", "emoji_picker.food-drink": "Jídlo a pití", "emoji_picker.objects": "Objekty", "emoji_picker.people-body": "Lidé a tělo", - "emoji_picker.recent": "Nedávné", - "emoji_picker.searchResults": "Výsledky hledání", - "emoji_picker.smileys-emotion": "Smajlíci a emotikony", + "emoji_picker.recent": "Nedávno použité", + "emoji_picker.searchResults": "Výsledky vyhledávání", + "emoji_picker.smileys-emotion": "Smajlíci a Emoce", "emoji_picker.symbols": "Symboly", "emoji_picker.travel-places": "Cestování a místa", "emoji_skin.dark_skin_tone": "tmavý odstín pleti", "emoji_skin.default": "výchozí tón pleti", "emoji_skin.light_skin_tone": "světlý tón pleti", "emoji_skin.medium_dark_skin_tone": "středně tmavý odstín pleti", - "emoji_skin.medium_light_skin_tone": "středně tmavý odstín pleti", - "emoji_skin.medium_skin_tone": "středně tmavý odstín pleti", + "emoji_skin.medium_light_skin_tone": "středně světlý odstín pleti", + "emoji_skin.medium_skin_tone": "střední odstín pleti", + "extension.no_memberships.description": "K sdílení obsahu musíte být členem týmu na serveru Mattermost.", + "extension.no_memberships.title": "Zatím nejste členem žádného týmu", + "extension.no_servers.description": "K sdílení obsahu musíte být přihlášen na server Mattermost.", + "extension.no_servers.title": "Nejste připojen k žádným serverům", "file_upload.fileAbove": "Soubory musí být menší než {max}", - "friendly_date.daysAgo": "před {count} {count, plural, jedním {day} {days} dny}", - "friendly_date.hoursAgo": "{count} {count, plural, one {hour} other {hours}} ago (počet, množné číslo, před jednou hodinou)", - "friendly_date.minsAgo": "{count} {count, plural, one {min} other {mins}} ago (před minutami)", - "friendly_date.monthsAgo": "{count} {počet, množné číslo, před jedním {měsícem} dalším {měsíci}}", + "find_channels.directory": "Adresář", + "find_channels.new_channel": "Nový Kanál", + "find_channels.open_dm": "Otevřít přímé zprávy", + "find_channels.title": "Najít kanály", + "friendly_date.daysAgo": "před {count} {count, plural, one {dnem} other {dny}}", + "friendly_date.hoursAgo": "Před {count} {count, plural, one {hodinou} other {hodinami}}", + "friendly_date.minsAgo": "Před {count} {count, plural, one {min} other {min}}", + "friendly_date.monthsAgo": "před {count} {count, plural, one {měsícem} other {měsíci}}", "friendly_date.now": "Nyní", - "friendly_date.yearsAgo": "{počet} {počet, množné číslo, před jedním {dnem} dalšími {dny}}", + "friendly_date.yearsAgo": "před {count} {count, plural, one {rokem} other {lety}}", "friendly_date.yesterday": "Včera", + "gallery.copy_link.failed": "Nepodařilo se zkopírovat odkaz do schránky", + "gallery.downloading": "Stahování...", "gallery.footer.channel_name": "Sdíleno v {channelName}", + "gallery.image_saved": "Obrázek uložen", "gallery.open_file": "Otevřít soubor", - "get_post_link_modal.title": "Zkopírovat odkaz", - "global_threads.allThreads": "Všechny vaše vlákna", + "gallery.opening": "Otvírání...", + "gallery.preparing": "Připravuje se...", + "gallery.save_failed": "Nelze uložit soubor", + "gallery.unsupported": "Náhled pro tento typ souboru není podporován. Zkuste stáhnout nebo sdílet soubor, abyste jej otevřeli v jiné aplikaci.", + "gallery.video_saved": "Video uloženo", + "general_settings.about": "O {appTitle}", + "general_settings.advanced_settings": "Pokročilá nastavení", + "general_settings.display": "Zobrazení", + "general_settings.help": "Pomoc", + "general_settings.notifications": "Oznámení", + "general_settings.report_problem": "Nahlásit Problém", + "generic.back": "Zpět", + "get_post_link_modal.title": "Kopírovat Odkaz", + "global_threads.allThreads": "Všechna vaše vlákna", "global_threads.emptyThreads.message": "Všechna vlákna, ve kterých jste zmíněni nebo kterých jste se účastnili, se zde zobrazí spolu s vlákny, která jste sledovali.", "global_threads.emptyThreads.title": "Zatím žádná sledovaná vlákna", "global_threads.emptyUnreads.message": "Vypadá to, že jste vše dohnali.", "global_threads.emptyUnreads.title": "Žádná nepřečtená vlákna", - "global_threads.markAllRead.cancel": "Zpět", - "global_threads.markAllRead.markRead": "Označit jako přečtené", - "global_threads.markAllRead.message": "Tím se vymaže nepřečtený stav všech vašich vláken zobrazených zde", + "global_threads.markAllRead.cancel": "Zrušit", + "global_threads.markAllRead.markRead": "Označit jako přečteno", + "global_threads.markAllRead.message": "Tímto se odstraní všechny nepřečtené stavy pro všechna vaše vlákna zobrazená zde", "global_threads.markAllRead.title": "Určitě chcete označit všechna vlákna jako přečtená?", - "global_threads.options.mark_as_read": "Označit jako přečtené", - "global_threads.options.open_in_channel": "Otevřít v kanálu", - "global_threads.options.title": "AKCE VLÁKNA", - "global_threads.unreads": "nepřečtené", - "interactive_dialog.submit": "Odeslat", + "global_threads.options.mark_as_read": "Označit jako Přečtené", + "global_threads.options.open_in_channel": "Otevřít v Kanálu", + "global_threads.options.title": "Akce Vlákna", + "global_threads.unreads": "Nepřečtené", + "home.header.plus_menu": "Možnosti", + "integration_selector.multiselect.submit": "Hotovo", + "interactive_dialog.submit": "Zaslat", + "intro.add_members": "Přidat členy", + "intro.channel_info": "Informace", + "intro.created_by": "Vytvořeno {creator} v {date}.", + "intro.direct_message": "Toto je začátek vaší konverzace s {teammate}. Zprávy a soubory sdílené zde nejsou viditelné pro ostatní.", + "intro.group_message.after_gm_as_dm": "Toto je začátek vaší konverzace s touto skupinou. Zprávy a soubory sdílené zde nejsou viditelné pro nikoho jiného mimo skupinu.", + "intro.group_message.all": "Budete upozorněni na veškerou aktivitu v této skupinové zprávě.", + "intro.group_message.common": "Toto je začátek vaší konverzace s touto skupinou.", + "intro.group_message.mention": "Vybrali jste si být upozorněni pouze když budete zmíněni v této skupinové zprávě.", + "intro.group_message.muted": "Tato skupinová zpráva je momentálně ztlumená, takže nebudete dostávat žádná upozornění.", + "intro.group_message.none": "Vybrali jste si nikdy nedostávat upozornění na tuto skupinovou zprávu.", + "intro.private_channel": "Soukromý Kanál", + "intro.public_channel": "Veřejný Kanál", + "intro.townsquare": "Vítejte v {name}. Každý se automaticky stává členem tohoto kanálu, když se připojí k týmu.", + "intro.welcome": "Vítejte v {displayName} kanálu.", + "intro.welcome.private": "Pouze pozvaní členové mohou vidět zprávy zveřejněné v tomto soukromém kanálu.", + "intro.welcome.public": "Přidejte do kanálu další členy týmu nebo začněte konverzaci níže.", + "invite.members.already_member": "Tato osoba je již členem týmu", + "invite.members.user_is_guest": "Kontaktujte svého správce, abyste převedli tohoto hosta na plného člena", + "invite.search.email_invite": "pozvat", + "invite.search.no_results": "Nebylo nalezeno nic odpovídajícího", + "invite.searchPlaceholder": "Napište jméno nebo emailovou adresu…", + "invite.sendInvitationsTo": "Poslat pozvánky…", + "invite.send_error": "Při pokusu o odeslání pozvánek došlo k chybě. Zkontrolujte své síťové připojení a zkuste to znovu.", + "invite.send_invite": "Poslat", + "invite.shareLink": "Sdílet odkaz", + "invite.summary.back": "Vrátit se", + "invite.summary.done": "Hotovo", + "invite.summary.email_invite": "E-mail s pozvánkou byl odeslán", + "invite.summary.error": "{invitationsCount, plural, one {Pozvánka} other {Pozvánek}} se nepodařilo úspěšně odeslat", + "invite.summary.member_invite": "Pozván jako člen {teamDisplayName}", + "invite.summary.not_sent": "{notSentCount, plural, one {Pozvánka nebyla} other {Pozvánky nebyly}} odeslány", + "invite.summary.report.notSent": "{count} {count, plural, one {Pozvánka} other {Pozvánky}} neodeslány", + "invite.summary.report.sent": "{count} úspěšná {count, plural, one {pozvánka} other {pozvánky}}", + "invite.summary.sent": "Vaše {sentCount, plural, one {pozvánka byla} other {pozvánky byly}} odeslána", + "invite.summary.smtp_failure": "SMTP není nakonfigurován v systémové konzoli", + "invite.summary.some_not_sent": "{notSentCount, plural, one {Pozvání nebylo} other {Některá pozvání nebyla}} odeslána", + "invite.summary.try_again": "Zkusit znovu", + "invite.title": "Pozvat", + "invite.title.summary": "Souhrn pozvánek", + "invite_people_to_team.message": "Zde je odkaz pro spolupráci a komunikaci s námi na Mattermostu.", + "invite_people_to_team.title": "Připojit se k {team} týmu", + "join_team.error.group_error": "Musíte být členem propojené skupiny, abyste se mohli připojit k tomuto týmu.", + "join_team.error.message": "Při připojování k týmu došlo k chybě", + "join_team.error.title": "Chyba při připojování k týmu", "last_users_message.added_to_channel.type": "byli **přidáni do kanálu** uživatelem {actor}.", "last_users_message.added_to_team.type": "byli **přidáni do týmu** uživatelem {actor}.", "last_users_message.first": "{firstUser} a ", "last_users_message.joined_channel.type": "**se připojil na kanál**.", - "last_users_message.joined_team.type": "**se přidal/a k týmu**.", + "last_users_message.joined_team.type": "**se přidal k týmu**.", "last_users_message.left_channel.type": "**odešel z kanálu**.", "last_users_message.left_team.type": "**odešel z týmu**.", "last_users_message.others": "{numOthers} ostatních ", "last_users_message.removed_from_channel.type": "byli **odebráni z kanálu**.", "last_users_message.removed_from_team.type": "byli **odebráni z týmu**.", - "login.email": "Email", + "load_categories_error.message": "Došlo k problému při načítání obsahu pro tento server.", + "load_categories_error.title": "Nepodařilo se načíst kategorie pro {serverName}", + "load_channels_error.message": "Došlo k problému při načítání obsahu pro tento tým.", + "load_channels_error.title": "Nepodařilo se načíst {teamDisplayName}", + "load_teams_error.message": "Došlo k problému při načítání obsahu pro tento server.", + "load_teams_error.title": "Nepodařilo se načíst {serverName}", + "login.email": "E-mail", "login.forgot": "Zapomněli jste heslo?", - "login.ldapUsername": "Uživatelské jméno v AD/LDAP", + "login.invalid_credentials": "Kombinace e-mailu a hesla je nesprávná", + "login.ldapUsername": "Uživatelské Jméno v AD/LDAP", "login.or": "nebo", "login.password": "Heslo", - "login.signIn": "Přihlašte se", - "login.username": "Uživatelské jméno", + "login.signIn": "Přihlášení", + "login.signingIn": "Přihlašování", + "login.username": "Uživatelské Jméno", "login_mfa.enterToken": "Pro dokončení přihlášení vlož, prosím, token z autentizační aplikace.", - "login_mfa.token": "MFA token", + "login_mfa.token": "Zadejte MFA token", "login_mfa.tokenReq": "Zadejte prosím token MFA", + "markdown.latex.error": "Chyba při vykreslování Latexu", + "markdown.max_nodes.error": "Tato zpráva je příliš dlouhá na to, aby byla plně zobrazena na mobilním zařízení. Zobrazte ji na desktopu nebo kontaktujte správce, aby zvýšil tento limit.", + "mentions.empty.paragraph": "Zde uvidíte zprávy, když vás někdo zmíní nebo použije termíny, které sledujete.", + "mentions.empty.title": "Zatím žádné zmínky", "mobile.about.appVersion": "Verze aplikace: {version} (Build {number})", "mobile.account.settings.save": "Uložit", + "mobile.acknowledgements.header": "Potvrzení přijetí", "mobile.action_menu.select": "Vyberte možnost", - "mobile.android.back_handler_exit": "Opětovným stiskem Zpět ukončit", - "mobile.android.photos_permission_denied_description": "Nahraj fotky na Mattermost nebo je ulož do svého zařízení. Jdi do Nastavení a povol Mattermostu práva pro čtení a zápis do své knihovny fotek.", - "mobile.android.photos_permission_denied_title": "{applicationName} chce přístup k Tvým fotkám", + "mobile.add_team.create_team": "Vytvořit nový tým", + "mobile.add_team.join_team": "Připojit se k jinému týmu", + "mobile.android.back_handler_exit": "Opětovným stiskem zpět ukončit", + "mobile.android.photos_permission_denied_description": "Nahrajte fotografie na svůj server nebo je uložte do zařízení. Otevřete Nastavení a udělte {applicationName} přístup pro čtení a zápis do vaší knihovny fotografií.", + "mobile.android.photos_permission_denied_title": "{applicationName} žádá o přístup k vašim fotkám", "mobile.announcement_banner.title": "Oznámení", - "mobile.camera_photo_permission_denied_description": "Vyfoť či nahraj fotky na Mattermost nebo ulož je do svého zařízení. Jdi do Nastavení a povol Mattermostu práva pro přístup k foťáku.", - "mobile.camera_photo_permission_denied_title": "{applicationName} chce přístup k Tvému foťáku", + "mobile.calls_audio_device": "Vyberte zvukové zařízení", + "mobile.calls_bluetooth": "Bluetooth", + "mobile.calls_call_ended": "Hovor ukončen", + "mobile.calls_call_screen": "Hovor", + "mobile.calls_call_thread": "Vlákno Hovoru", + "mobile.calls_cancel": "Zrušit", + "mobile.calls_captions": "Titulky", + "mobile.calls_captions_turned_on": "Živé titulky zapnuty", + "mobile.calls_disable": "Zakázat hovory", + "mobile.calls_dismiss": "Odmítnout", + "mobile.calls_enable": "Povolit hovory", + "mobile.calls_end_call_title": "Ukončit hovor", + "mobile.calls_end_msg_channel": "Jste si jisti, že chcete ukončit hovor s {numParticipants} účastníky v {displayName}?", + "mobile.calls_end_msg_channel_default": "Jste si jisti, že chcete ukončit hovor?", + "mobile.calls_end_msg_dm": "Jste si jisti, že chcete ukončit hovor s {displayName}?", + "mobile.calls_end_permission_msg": "Nemáte oprávnění na ukončení hovoru. Prosím, požádejte tvůrce hovoru, aby hovor ukončil.", + "mobile.calls_end_permission_title": "Chyba", + "mobile.calls_ended_at": "Skončil v", + "mobile.calls_error_message": "Chyba: {error}", + "mobile.calls_error_title": "Chyba", + "mobile.calls_group_calls_not_available": "Hovory jsou k dispozici pouze v kanálech přímých zpráv.", + "mobile.calls_headset": "Sluchátka", + "mobile.calls_hide_cc": "Skrýt živé titulky", + "mobile.calls_host": "hostitel", + "mobile.calls_host_controls": "Ovládání hostitele", + "mobile.calls_host_end_confirm": "Ukončit hovor pro všechny", + "mobile.calls_host_leave_confirm": "Opustit hovor", + "mobile.calls_host_leave_title": "Jste si jisti, že chcete opustit tento hovor?", + "mobile.calls_host_rec": "Nahráváte tuto schůzku. Zvažte informování všech, že je schůzka nahrávána.", + "mobile.calls_host_rec_error": "Zkuste nahrávání znovu. Můžete také kontaktovat svého systémového správce pro pomoc s odstraněním problémů.", + "mobile.calls_host_rec_error_title": "Při nahrávání došlo k chybě", + "mobile.calls_host_rec_stop_body": "Nahrávání hovoru bude zpracováno a zveřejněno ve vlákně hovoru. Jste si jisti, že chcete nahrávání zastavit?", + "mobile.calls_host_rec_stop_confirm": "Zastavit nahrávání", + "mobile.calls_host_rec_stop_title": "Zastavit nahrávání", + "mobile.calls_host_rec_stopped": "Záznam najdete ve vlákně chatu tohoto hovoru, jakmile bude zpracován.", + "mobile.calls_host_rec_stopped_title": "Nahrávání bylo zastaveno. Zpracovává se...", + "mobile.calls_host_rec_title": "Nahráváte", + "mobile.calls_host_rec_trans_stop_body": "Nahrávání hovoru a soubory s přepisem budou zpracovány a zveřejněny ve vlákně hovoru. Jste si jisti, že chcete zastavit nahrávání a přepis?", + "mobile.calls_host_rec_trans_stop_title": "Zastavit nahrávání a přepis", + "mobile.calls_host_transcription": "Zvažte informování všech, že tato schůzka je nahrávána a přepisována.", + "mobile.calls_host_transcription_title": "Nahrávání a přepis byly zahájeny", + "mobile.calls_incoming_dm": "{name} vás zve k hovoru", + "mobile.calls_incoming_gm": "{name} vás zve na hovor s {num, plural, one {# dalším} other {# dalšími}}", + "mobile.calls_join": "Připojit", + "mobile.calls_join_call": "Připojit se k hovoru", + "mobile.calls_joining": "Připojování...", + "mobile.calls_lasted": "Trval {duration}", + "mobile.calls_leave": "Opustit", + "mobile.calls_leave_call": "Opustit hovor", + "mobile.calls_limit_msg": "Maximální počet účastníků na jeden hovor je {maxParticipants}. Kontaktujte svého systémového správce, abyste zvýšili tento limit.", + "mobile.calls_limit_msg_GA": "Přejděte na Cloud Professional nebo Cloud Enterprise, abyste povolili skupinové hovory s více než {maxParticipants} účastníky.", + "mobile.calls_limit_reached": "Byl dosažen limit účastníků", + "mobile.calls_lower_hand": "Snížit zvednutou ruku", + "mobile.calls_make_host": "Udělat hostitelem", + "mobile.calls_mic_error": "Pro účast otevřete Nastavení a udělte Mattermost přístup k vašemu mikrofonu.", + "mobile.calls_more": "Více", + "mobile.calls_mute": "Ztlumit", + "mobile.calls_mute_others": "Ztlumit ostatní", + "mobile.calls_mute_participant": "Ztlumit účastníka", + "mobile.calls_name_is_talking_postfix": "hovoří...", + "mobile.calls_noone_talking": "Nikdo nemluví", + "mobile.calls_not_available_msg": "Kontaktujte svého systémového správce, abyste povolili tuto funkci.", + "mobile.calls_not_available_option": "(Není k dispozici)", + "mobile.calls_not_available_title": "Hovory nejsou povoleny", + "mobile.calls_not_connected": "V aktuálním kanálu nejste připojeni k hovoru.", + "mobile.calls_ok": "Okay", + "mobile.calls_okay": "Dobře", + "mobile.calls_open_channel": "Otevřít Kanál", + "mobile.calls_participant_limit_title_GA": "Tento hovor dosáhl kapacity", + "mobile.calls_participant_rec": "Hostitel zahájil nahrávání této schůzky. Zůstat v schůzce znamená, že souhlasíte s tím, že budete nahráváni.", + "mobile.calls_participant_rec_title": "Probíhá nahrávání", + "mobile.calls_participant_transcription": "Hostitel zahájil nahrávání a přepis této schůzky. Zůstat v schůzce znamená, že souhlasíte s nahráváním a přepisováním.", + "mobile.calls_participant_transcription_title": "Probíhá nahrávání a přepis", + "mobile.calls_participants": "Účastníci", + "mobile.calls_people": "Lidi", + "mobile.calls_phone": "Telefon", + "mobile.calls_quality_warning": "Kvalita hovoru může být snížena kvůli nestabilnímu připojení k síti.", + "mobile.calls_raise_hand": "Zvednout ruku", + "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# dalších }} zvedlo ruku", + "mobile.calls_react": "Reagovat", + "mobile.calls_record": "Nahrávat", + "mobile.calls_recording_start_in_progress": "Nahrávání již probíhá.", + "mobile.calls_recording_start_no_permissions": "Nemáte oprávnění zahájit nahrávání. Požádejte hostitele hovoru, aby nahrávání zahájil.", + "mobile.calls_recording_stop_no_permissions": "Nemáte oprávnění zastavit nahrávání. Požádejte hostitele hovoru, aby nahrávání zastavil.", + "mobile.calls_recording_stop_none_in_progress": "Neprobíhá žádné nahrávání.", + "mobile.calls_remove": "Odstranit", + "mobile.calls_remove_alert_body": "Jste si jisti, že chcete odstranit {displayName} z hovoru? ", + "mobile.calls_remove_alert_title": "Odstranit účastníka", + "mobile.calls_remove_participant": "Odstranit z hovoru", + "mobile.calls_removed_alert_body": "Hostitel vás odebral z hovoru.", + "mobile.calls_removed_alert_title": "Byl jste odstraněn z hovoru", + "mobile.calls_request_message": "Hovory jsou aktuálně v testovacím režimu a mohou je zahájit pouze systémoví administrátoři. Pro pomoc kontaktujte svého systémového správce", + "mobile.calls_request_title": "Hovory nejsou momentálně povoleny", + "mobile.calls_see_logs": "Zobrazit protokoly serveru", + "mobile.calls_show_cc": "Zobrazit živé titulky", + "mobile.calls_speaker": "Reproduktor", + "mobile.calls_start_call": "Zahájit Hovor", + "mobile.calls_start_call_exists": "V kanálu již probíhá hovor.", + "mobile.calls_started_call": "Hovor začal", + "mobile.calls_starting": "Začínám...", + "mobile.calls_stop_recording": "Zastavit Nahrávání", + "mobile.calls_stop_screenshare": "Zastavit sdílení obrazovky", + "mobile.calls_tablet": "Tablet", + "mobile.calls_thread": "Vlákno", + "mobile.calls_unmute": "Ukončit ztišení", + "mobile.calls_user_left_channel_error_message": "Opustili jste kanál a byli jste odpojeni od hovoru.", + "mobile.calls_user_left_channel_error_title": "Opustili jste kanál", + "mobile.calls_user_removed_from_channel_error_message": "Byli jste odstraněni z kanálu a odpojeni od hovoru.", + "mobile.calls_user_removed_from_channel_error_title": "Byli jste odstraněni z kanálu", + "mobile.calls_view_profile": "Zobrazit profil", + "mobile.calls_viewing_screen": "Sledujete obrazovku {name}", + "mobile.calls_you": "(vy)", + "mobile.calls_you_2": "Vy", + "mobile.camera_photo_permission_denied_description": "Pořiďte fotografie a nahrajte je na svůj server nebo je uložte do svého zařízení. Otevřete Nastavení a udělte {applicationName} přístup pro čtení a zápis k vaší kameře.", + "mobile.camera_photo_permission_denied_title": "{applicationName} požaduje přístup k vaší kameře", + "mobile.camera_type.title": "Volby pro kameru", + "mobile.channel_add_members.error": "Došlo k chybě a nepodařilo se přidat tyto uživatele do kanálu.", "mobile.channel_info.alertNo": "Ne", "mobile.channel_info.alertYes": "Ano", - "mobile.channel_list.unreads": "NEPŘEČTENÉ", + "mobile.channel_list.recent": "Nedávné", + "mobile.channel_list.unreads": "Nepřečtené", "mobile.commands.error_title": "Chyba při vykonávání příkazu", - "mobile.components.select_server_view.connect": "Připojit", + "mobile.components.select_server_view.connect": "Spojit", "mobile.components.select_server_view.connecting": "Připojuji", + "mobile.components.select_server_view.displayHelp": "Vyberte zobrazovací název pro svůj server", + "mobile.components.select_server_view.displayName": "Zobrazovací název", "mobile.components.select_server_view.enterServerUrl": "Zadejte URL serveru", + "mobile.components.select_server_view.msg_connect": "Pojďme se připojit k serveru", + "mobile.components.select_server_view.msg_description": "Server je komunikační centrum vašeho týmu, ke kterému se přistupuje pomocí jedinečné URL adresy", + "mobile.components.select_server_view.msg_welcome": "Vítejte", "mobile.components.select_server_view.proceed": "Pokračovat", "mobile.create_channel": "Vytvořit", + "mobile.create_channel.title": "Nový kanál", + "mobile.create_direct_message.max_limit_reached": "Skupinové zprávy jsou omezeny na {maxCount} členů", + "mobile.create_direct_message.start": "Začít konverzaci", "mobile.create_post.read_only": "Tento kanál je pouze pro čtení.", "mobile.custom_list.no_results": "Žádné výsledky", - "mobile.custom_status.choose_emoji": "Výběr emoji", + "mobile.custom_status.choose_emoji": "Vyberte si emodži", "mobile.custom_status.clear_after": "Vymazat po", + "mobile.custom_status.clear_after.title": "Vymazat vlastní status po", "mobile.custom_status.modal_confirm": "Hotovo", + "mobile.deep_link.invalid": "Odkaz který se pokoušíte otevřít není platný.", + "mobile.diagnostic_id.empty": "Na tomto serveru chybí hodnota DiagnosticId. Kontaktujte svého systémového administrátora, aby tuto hodnotu zkontroloval a restartoval server.", + "mobile.direct_message.error": "Nepodařilo se nám otevřít přímou zprávu s {displayName}.", + "mobile.display_settings.clockDisplay": "Zobrazení hodin", + "mobile.display_settings.crt": "Sbalené vlákna odpovědí", "mobile.display_settings.theme": "Téma", - "mobile.document_preview.failed_description": "Nastala chyba při otevření dokumentu. Prosím, ujistěte se, že máte nainstalován prohlížeč pro {fileType} a zkuste to znovu.\n", - "mobile.document_preview.failed_title": "Otevření dokumentu se nepodařilo", - "mobile.downloader.disabled_description": "Stahování souborů je zakázáno na tomto serveru. Prosím kontaktujte vašeho systémového administrátora pro více detailů.\n", - "mobile.downloader.disabled_title": "Stahování selhalo", - "mobile.downloader.failed_description": "Došlo k chybě při stahování souboru. Prosím ověřte vaše internetové připojení a zkuste to znovu.\n", - "mobile.downloader.failed_title": "Stažení selhalo", + "mobile.display_settings.timezone": "Časové pásmo", + "mobile.document_preview.failed_description": "Nastala chyba při otvírání dokumentu. Prosím, ujistěte se, že máte nainstalován prohlížeč pro {fileType} a zkuste to znovu.\n", + "mobile.document_preview.failed_title": "Otevření dokumentu se nezdařilo", + "mobile.downloader.disabled_description": "Stahování souborů je na tomto serveru zakázáno. Pro více informací kontaktujte svého systémového administrátora.\n", + "mobile.downloader.disabled_title": "Stahování zakázáno", + "mobile.downloader.failed_description": "Došlo k chybě při stahování souboru. Prosím zkontrolujte vaše internetové připojení a zkuste to znovu.\n", + "mobile.downloader.failed_title": "Stahování se nezdařilo", "mobile.edit_channel": "Uložit", - "mobile.edit_post.title": "Upravit zprávu", + "mobile.edit_post.delete_question": "Opravdu chcete smazat tento Příspěvek?", + "mobile.edit_post.delete_title": "Potvrdit smazání příspěvku", + "mobile.edit_post.error": "Došlo k problému při úpravě této zprávy. Zkuste to prosím znovu.", + "mobile.edit_post.title": "Upravuje zprávu", "mobile.error_handler.button": "Spustit znovu", - "mobile.error_handler.description": "\nKlikni na znovuspuštění a pusť aplikaci znovu Po restartu můžeš nahlásit problém z menu nastavení.\n", + "mobile.error_handler.description": "\nKlepněte na znovu spustit, abyste aplikaci otevřeli znovu. Po restartu můžete problém nahlásit z nabídky nastavení.\n", "mobile.error_handler.title": "Došlo k neočekávané chybě", "mobile.file_upload.disabled2": "Nahrávání souborů z mobilu je zakázáno.", "mobile.file_upload.max_warning": "Nahrávání je omezeno na {count} souborů.", - "mobile.files_paste.error_description": "Při odesílání zprávy došlo k chybě. Prosím zkuste to znovu.", + "mobile.files_paste.error_description": "Při vkládání souboru(-ů) došlo k chybě. Zkuste to prosím znovu.", "mobile.files_paste.error_dismiss": "Zrušit", - "mobile.files_paste.error_title": "Vložení selhalo", + "mobile.files_paste.error_title": "Vložení se nezdařilo", "mobile.gallery.title": "{index} z {total}", - "mobile.ios.photos_permission_denied_description": "Nahraj fotky a videa na Mattermost nebo je ulož do svého zařízení. Jdi do Nastavení a povol Mattermostu přístup ke knihovně fotek a videí.", - "mobile.ios.photos_permission_denied_title": "{applicationName} chce přístup k Tvým fotkám", - "mobile.join_channel.error": "Nepodařilo se otevřít přímou zprávu s {displayName}. Prosím zkontrolujte vaše připojení a zkuste to znovu.", + "mobile.integration_selector.loading_channels": "Načítání kanálů...", + "mobile.integration_selector.loading_options": "Načítání možností...", + "mobile.ios.photos_permission_denied_description": "Nahrajte fotografie a videa na svůj server nebo je uložte do svého zařízení. Otevřete Nastavení a udělte {applicationName} přístup pro čtení a zápis k vaší galerii fotografií a videí.", + "mobile.ios.photos_permission_denied_title": "{applicationName} požaduje přístup k vaším fotografiím", + "mobile.ios.plist.NSAppleMusicUsageDescription": "Povolení přístupu k vaší mediální knihovně znamená, že můžete připojovat soubory z vaší mediální knihovny k vašim zprávám v {applicationName}.", + "mobile.ios.plist.NSBluetoothAlwaysUsageDescription": "Povolení přístupu k Bluetooth znamená, že můžeme synchronizovat obsah mezi vašimi zařízeními a klienty.", + "mobile.ios.plist.NSBluetoothPeripheralUsageDescription": "Povolení přístupu k Bluetooth znamená, že se můžeme připojit k audio periferiím pro hovory a synchronizovat obsah mezi vašimi zařízeními a klienty.", + "mobile.ios.plist.NSCameraUsageDescription": "Povolení přístupu k vaší kameře vám umožňuje pořizovat fotografie nebo videa a připojovat je k zprávám.", + "mobile.ios.plist.NSFaceIDUsageDescription": "Povolení přístupu k vašemu Face ID znamená, že můžeme omezit přístup neautorizovaných uživatelů k {applicationName} na vašem zařízení.", + "mobile.ios.plist.NSLocationAlwaysUsageDescription": "Povolení přístupu k vašim údajům o poloze znamená, že můžeme přidávat metadata o poloze k fotografiím a videím, které sdílíte v {applicationName}.", + "mobile.ios.plist.NSLocationWhenInUseUsageDescription": "Povolení přístupu k vašim údajům o poloze znamená, že můžeme přidávat metadata o poloze k fotografiím a videím, které sdílíte v {applicationName}.", + "mobile.ios.plist.NSMicrophoneUsageDescription": "Povolení přístupu k mikrofonům vašeho zařízení znamená, že můžete zachytávat audio pro hovory nebo videa, která budete sdílet v {applicationName}.", + "mobile.ios.plist.NSPhotoLibraryAddUsageDescription": "Povolení přístupu pro zápis do vaší knihovny fotografií znamená, že můžete ukládat stažené fotografie a videa z {applicationName} na vaše zařízení.", + "mobile.ios.plist.NSPhotoLibraryUsageDescription": "Povolení přístupu k vaší knihovně fotografií vám umožňuje vybrat fotografie nebo videa a připojit je k zprávám.", + "mobile.ios.plist.NSSpeechRecognitionUsageDescription": "Povolení vašemu zařízení odesílat uživatelská data společnosti Apple znamená, že můžete odesílat hlasové zprávy do {applicationName}.", + "mobile.join_channel.error": "Nepodařilo se nám připojit k kanálu {displayName}.", + "mobile.leave_and_join_confirmation": "Opustit a připojit se", + "mobile.leave_and_join_message": "Již jste na hovoru v kanálu ~{leaveChannelName}. Chcete opustit aktuální hovor a připojit se k hovoru v kanálu ~{joinChannelName}?", + "mobile.leave_and_join_title": "Jste si jisti, že chcete přepnout na jiný hovor?", "mobile.link.error.text": "Odkaz nelze otevřít.", "mobile.link.error.title": "Chyba", + "mobile.login_options.cant_heading": "Nelze se přihlásit", + "mobile.login_options.enter_credentials": "Zadejte své přihlašovací údaje níže.", + "mobile.login_options.entraid": "Entra ID", + "mobile.login_options.gitlab": "GitLab", + "mobile.login_options.google": "Google", + "mobile.login_options.heading": "Přihlaste se ke Svému Účtu", + "mobile.login_options.none": "Nemůžete se ještě přihlásit ke svému účtu. Musí být nakonfigurována alespoň jedna přihlašovací možnost. Kontaktujte svého správce systému pro pomoc.", + "mobile.login_options.openid": "Open ID", + "mobile.login_options.saml": "SAML", + "mobile.login_options.select_option": "Níže zvolte možnost přihlášení.", + "mobile.login_options.separator_text": "nebo se přihlaste přes", + "mobile.manage_members.admin": "Správce", + "mobile.manage_members.cancel": "Zrušit", + "mobile.manage_members.change_role.error": "Při pokusu o aktualizaci role došlo k chybě. Zkontrolujte své připojení a zkuste to znovu.", + "mobile.manage_members.done": "Hotovo", + "mobile.manage_members.make_channel_admin": "Udělat správcem kanálu", + "mobile.manage_members.make_channel_member": "Udělat členem kanálu", + "mobile.manage_members.manage": "Spravovat", + "mobile.manage_members.manage_member": "Spravovat člena", + "mobile.manage_members.member": "Člen", + "mobile.manage_members.message": "Jste si jisti, že chcete odstranit vybraného člena z kanálu?", + "mobile.manage_members.remove": "Odstranit", + "mobile.manage_members.remove_member": "Odstranit z kanálu", + "mobile.manage_members.section_title_admins": "SPRÁVCI KANÁLU", + "mobile.manage_members.section_title_members": "ČLENOVÉ", "mobile.managed.blocked_by": "Blokováno od {vendor}", - "mobile.managed.exit": "Upravit", - "mobile.managed.jailbreak": "Jailbroken zařízení nejsou důvěryhodné pro {vendor}, prosím, ukončete aplikaci.", - "mobile.managed.not_secured.android": "Toto zařízení musí být zabezpečeno zámkem obrazovky aby šel Mattermost používat.", - "mobile.managed.not_secured.ios": "Toto zařízení musí být chráněno PINem aby šel používat Mattermost.\n\nJdi do Nastavení > Face ID a heslo.", - "mobile.managed.not_secured.ios.touchId": "Toto zařízení musí být chráněno PINem aby šel používat Mattermost.\n\nJdi do Nastavení > Touch ID a heslo.", + "mobile.managed.exit": "Východ", + "mobile.managed.jailbreak": "Zařízení s jailbreakem nebo s root právy nejsou důvěryhodná pro {vendor}.\n\nAplikace se nyní zavře.", + "mobile.managed.not_secured.android": "Toto zařízení musí být zabezpečeno uzamčením obrazovky, aby bylo možné používat Mattermost.", + "mobile.managed.not_secured.ios": "Toto zařízení musí být chráněno PINem aby bylo možné používat Mattermost.\n\nJdi do Nastavení > Face ID a heslo.", + "mobile.managed.not_secured.ios.touchId": "Toto zařízení musí být chráněno heslem aby bylo možno používat Mattermost.\n\nJděte do Nastavení > Touch ID a heslo.", "mobile.managed.secured_by": "Zabezpečeno od {vendor}", - "mobile.managed.settings": "Jdi do nastavení", + "mobile.managed.settings": "Jděte do nastavení", "mobile.markdown.code.copy_code": "Zkopírovat kód", - "mobile.markdown.code.plusMoreLines": "+{count, number} více {count, plural, one {line} other {lines}}", + "mobile.markdown.code.plusMoreLines": "+{count, number} více {count, plural, one {linka} other {linky}}", + "mobile.markdown.copy_header": "Kopírovat text hlavičky", "mobile.markdown.image.too_large": "Obrázek překračuje povolené rozměry {maxWidth} x {maxHeight}:", "mobile.markdown.link.copy_url": "Zkopírovat URL", "mobile.mention.copy_mention": "Zkopírovat Zmínku", - "mobile.message_length.message": "Zpráva je příliš dlouhá. Počet znaků: {count}/{max}", - "mobile.message_length.message_split_left": "Zpráva překročila povolenou délku", + "mobile.message_length.message": "Vaše zpráva je příliš dlouhá. Aktuální počet znaků: {count}/{max}", + "mobile.message_length.message_split_left": "Zpráva překračuje limit znaků", "mobile.message_length.title": "Délka zprávy", - "mobile.oauth.failed_to_login": "Pokus o přihlášení selhal. Zkuste to prosím znovu.", - "mobile.oauth.failed_to_open_link": "Odkaz se nepodařilo otevřít. Zkuste to prosím znovu.", - "mobile.oauth.failed_to_open_link_no_browser": "Odkaz se nepodařilo otevřít. Ověřte prosím, zda je v aktuálním prostoru nainstalován prohlížeč.", - "mobile.oauth.something_wrong": "Něco se pokazilo", - "mobile.oauth.switch_to_browser": "Prosím přejděte do prohlížeče a dokončete přihlášení", + "mobile.no_results.spelling": "Zkontrolujte pravopis nebo zkuste jiný dotaz.", + "mobile.no_results_with_term": "Žádné výsledky pro “{term}“", + "mobile.no_results_with_term.files": "Žádné odpovídající soubory “{term}“", + "mobile.no_results_with_term.messages": "Nebyly nalezeny žádné shody pro „{term}“", + "mobile.oauth.failed_to_login": "Váš pokus o přihlášení selhal. Zkuste to prosím znovu.", + "mobile.oauth.failed_to_open_link": "Váš odkaz se nepodařilo otevřít. Zkuste to prosím znovu.", + "mobile.oauth.failed_to_open_link_no_browser": "Váš odkaz se nepodařilo otevřít. Ověřte prosím, zda je na zařízení nainstalován prohlížeč.", + "mobile.oauth.something_wrong.okButton": "Okay", + "mobile.oauth.success.description": "Přihlašování probíhá, chvíli prosím počkejte...", + "mobile.oauth.success.title": "Autentizace byla úspěšná", + "mobile.oauth.switch_to_browser": "Jste přesměrováni k vašemu poskytovateli přihlášení", + "mobile.oauth.switch_to_browser.error_title": "Chyba při přihlášení", + "mobile.oauth.switch_to_browser.title": "Přesměrování...", "mobile.oauth.try_again": "Zkuste to znovu", + "mobile.onboarding.next": "Další", + "mobile.onboarding.sign_in": "Zapsat se", + "mobile.onboarding.sign_in_to_get_started": "Přihlaste se a začněte", "mobile.open_dm.error": "Nepodařilo se otevřít přímou zprávu s {displayName}. Prosím zkontrolujte vaše připojení a zkuste to znovu.", "mobile.open_gm.error": "Nemohli jsme otevřít skupinovou zprávu s těmito uživateli. Prosím zkontrolujte vaše připojení a zkuste to znovu.", - "mobile.participants.header": "ÚČASTNÍCI VLÁKNA", + "mobile.participants.header": "Účastníci Vlákna", "mobile.permission_denied_dismiss": "Nepovolit", "mobile.permission_denied_retry": "Nastavení", "mobile.post.cancel": "Zrušit", @@ -289,79 +724,211 @@ "mobile.post.delete_title": "Smazat příspěvek", "mobile.post.failed_delete": "Smazat zprávu", "mobile.post.failed_retry": "Zkusit znovu", - "mobile.post_info.add_reaction": "Přidat reakci", + "mobile.post_info.add_reaction": "Přidat Reakci", "mobile.post_info.copy_text": "Zkopírovat text", - "mobile.post_info.mark_unread": "Označit jako nepřečtené", - "mobile.post_info.pin": "Připnout ke kanálu", + "mobile.post_info.mark_unread": "Označit jako Nepřečtené", + "mobile.post_info.pin": "Připnout ke Kanálu", "mobile.post_info.reply": "Odpovědět", + "mobile.post_info.save": "Uložit", "mobile.post_info.unpin": "Odepnout z kanálu", - "mobile.post_pre_header.pinned": "Připojeno", + "mobile.post_info.unsave": "Zrušit uložení", + "mobile.post_pre_header.pinned": "Připnuto", + "mobile.post_pre_header.pinned_saved": "Připnuto a uloženo", + "mobile.post_pre_header.saved": "Uloženo", "mobile.post_textbox.entire_channel.cancel": "Zrušit", "mobile.post_textbox.entire_channel.confirm": "Potvrdit", - "mobile.post_textbox.entire_channel.message": "Použitím @all nebo @channel zašleš notifikaci na {totalMembers, number} {totalMembers, plural, one {osobu} other {osob}}. Skutečně to chceš udělat?", - "mobile.post_textbox.entire_channel.message.with_timezones": "Použitím @all nebo @channel zašleš notifikace pro {totalMembers, number} {totalMembers, plural, one {osobu} other {osob}} v {timezones, number} {timezones, plural, one {časové zóně} other {časových zónách}}. Skutečně to chceš udělat?", + "mobile.post_textbox.entire_channel.message": "Použitím @all nebo @channel se chystáte poslat upozornění až {totalMembers, number} {totalMembers, plural, one {osobě} other {lidem}}. Jste si jistý, že to chcete udělat?", + "mobile.post_textbox.entire_channel.message.with_timezones": "Použitím @all nebo @channel zašleš notifikace pro {totalMembers, number} {totalMembers, plural, one {osobu} other {lidí}} v {timezones, number} {timezones, plural, one {časové zóně} other {časových zónách}}. Skutečně to chcete udělat?", "mobile.post_textbox.entire_channel.title": "Potvrďte odeslání upozornění celému kanálu", - "mobile.post_textbox.entire_channel_here.message": "Použitím @here se chystáte zasílat oznámení až {celkemČlenů, počet} {celkemČlenů, množné číslo, jedné {osobě} dalším {osobám}}. Jste si jisti, že to chcete udělat?", - "mobile.post_textbox.entire_channel_here.message.with_timezones": "Pomocí @here se chystáte odesílat oznámení až do {celkový počet členů, number} {celkový počet členů, plurál, jedna {osoba} další {lidé}} v {časových zónách, number} {časové zóny, plurál, jedna {časová zóna} další {časové zóny}}. Jste si jisti, že to chcete udělat?", - "mobile.post_textbox.groups.title": "Potvrdit zaslání notifikace na skupiny", + "mobile.post_textbox.entire_channel_here.message": "Použitím @here se chystáte poslat upozornění až {totalMembers, number} {totalMembers, plural, one {osobě} other {lidem}}. Jste si jistí, že to chcete udělat?", + "mobile.post_textbox.entire_channel_here.message.with_timezones": "Použitím @here se chystáte poslat upozornění až {totalMembers, number} {totalMembers, plural, one {osobě} other {lidem}} ve {timezones, number} {timezones, plural, one {časovém pásmu} other {časových pásmech}}. Jste si jistí, že to chcete udělat?", + "mobile.post_textbox.groups.title": "Potvrdit odeslání upozornění do skupin", "mobile.post_textbox.uploadFailedDesc": "Některé přílohy se nepodařilo nahrát na server. Opravdu chcete zprávu odeslat?", - "mobile.post_textbox.uploadFailedTitle": "Chyba přílohy", + "mobile.post_textbox.uploadFailedTitle": "Chyba při nahrávání přílohy", "mobile.privacy_link": "Zásady ochrany osobních údajů", - "mobile.push_notification_reply.button": "Odeslat", + "mobile.push_notification_reply.button": "Poslat", "mobile.push_notification_reply.placeholder": "Napiš odpověď...", "mobile.push_notification_reply.title": "Odpověď", "mobile.rename_channel.display_name_maxLength": "Název kanálu musí být kratší než {maxLength, number} znaků", "mobile.rename_channel.display_name_minLength": "Název kanálu musí být delší než {minLength, number} znaků", "mobile.rename_channel.display_name_required": "Název kanálu je vyžadován", + "mobile.request.invalid_request_method": "Neplatná metoda požadavku", "mobile.request.invalid_response": "Byla přijata neplatná odpověď ze serveru.", "mobile.reset_status.alert_cancel": "Zrušit", - "mobile.reset_status.alert_ok": "Budiž", - "mobile.reset_status.title_ooo": "Vypnout \"Mimo kancelář\"?", + "mobile.reset_status.alert_ok": "Okay", + "mobile.reset_status.title_ooo": "Deaktivovat „Mimo kancelář“?", "mobile.routes.code": "Kód {language}", "mobile.routes.code.noLanguage": "Kód", - "mobile.routes.custom_status": "Nastavení stavu", + "mobile.routes.custom_status": "Nastavit vlastní status", "mobile.routes.table": "Tabulka", "mobile.routes.user_profile": "Profil", - "mobile.search.jump": "Přejít na poslední zprávy", - "mobile.server_link.error.text": "Odkaz nelze na tomto serveru najít.", + "mobile.screen.settings": "Nastavení", + "mobile.screen.your_profile": "Váš profil", + "mobile.search.jump": "Přeskočit na nedávné zprávy", + "mobile.search.modifier.exclude": "vyloučit hledané výrazy", + "mobile.search.modifier.from": "konkrétní uživatel", + "mobile.search.modifier.in": "konkrétní kanál", + "mobile.search.modifier.phrases": "zprávy s frázemi", + "mobile.search.results": "{count} {count, plural, one {výsledek} other {výsledků}} hledání", + "mobile.search.show_less": "Zobrazit méně", + "mobile.search.show_more": "Zobrazit více", + "mobile.search.team.select": "Vyberte tým, který chcete prohledat", + "mobile.server_identifier.exists": "Již jste připojení k tomuto serveru.", + "mobile.server_link.error.text": "Odkaz nebyl na tomto serveru nalezen.", "mobile.server_link.error.title": "Chyba odkazu", - "mobile.server_link.unreachable_channel.error": "Trvalý odkaz patří do odstraněné zprávy nebo do kanálu, ke nimž nemáte přístup.", - "mobile.server_link.unreachable_team.error": "Trvalý odkaz patří do odstraněné zprávy nebo do kanálu, ke nimž nemáte přístup.", - "mobile.server_link.unreachable_user.error": "Tento odkaz směřuje ke smazanému uživateli.", - "mobile.server_upgrade.button": "OK", + "mobile.server_link.unreachable_channel.error": "Tento odkaz patří k odstraněnému kanálu nebo k kanálu, ke kterému nemáte přístup.", + "mobile.server_link.unreachable_team.error": "Tento odkaz patří k odstraněnému týmu nebo k týmu, ke kterému nemáte přístup.", + "mobile.server_link.unreachable_user.error": "Nemůžeme vás přesměrovat na DM. Určený uživatel je neznámý.", + "mobile.server_name.exists": "Toto jméno již používáte pro jiný server.", + "mobile.server_ping_failed": "Nelze se připojit k serveru.", + "mobile.server_requires_client_certificate": "Server vyžaduje klientský certifikát pro autentizaci.", + "mobile.server_upgrade.button": "Okay", + "mobile.server_upgrade.description": "\nPro použití aplikace Mattermost je vyžadována aktualizace serveru. Prosím, požádejte svého správce systému o podrobnosti.\n", "mobile.server_upgrade.title": "Vyžadován upgrade serveru", - "mobile.server_url.empty": "Prosím vlož validní URL", + "mobile.server_url.deeplink.emm.denied": "Tato aplikace je řízena EMM a URL adresa serveru DeepLink se neshoduje s povoleným serverem EMM", + "mobile.server_url.empty": "Prosím vložte platnou URL adresu", "mobile.server_url.invalid_format": "URL musí začínat s http:// nebo https://", + "mobile.session_expired.title": "Relace Vypršela", + "mobile.session_expired_days": "Přihlaste se prosím, abyste mohli pokračovat v přijímání oznámení. Relace pro {siteName} jsou nakonfigurovány tak, aby vypršely každých {daysCount, number} {daysCount, plural, one {den} other {dnů}}.", + "mobile.session_expired_days_hrs": "Přihlaste se prosím, abyste mohli pokračovat v přijímání oznámení. Relace pro {siteName} jsou nakonfigurovány tak, aby vypršely každých {daysCount, number} {daysCount, plural, one {den} other {dnů}} a {hoursCount, number} {hoursCount, plural, one {hodina} other {hodin}}.", + "mobile.session_expired_hrs": "Přihlaste se prosím, abystemohli pokračovat v přijímání oznámení. Relace pro {siteName} jsou nakonfigurovány tak, aby vypršely každých {hoursCount, number} {hoursCount, plural, one {hodina} other {hodin}}.", "mobile.set_status.dnd": "Nerušit", - "mobile.storage_permission_denied_description": "Nahraj soubory na Mattermost. Jdi do Nastavení a povol Mattermostu přístup k souborům v tomto zařízení.", - "mobile.storage_permission_denied_title": "{applicationName} chce přístup k Tvým souborům", - "mobile.suggestion.members": "Člen", + "mobile.storage_permission_denied_description": "Nahrajte soubory na svůj server. Otevřete Nastavení a udělte {applicationName} přístup ke čtení a zápisu souborů na tomto zařízení.", + "mobile.storage_permission_denied_title": "{applicationName} požaduje přístup k vašim souborům", + "mobile.suggestion.members": "Členové", "mobile.system_message.channel_archived_message": "{username} archivoval kanál", - "mobile.system_message.channel_unarchived_message": "{username} zrušil archivaci kanálu", - "mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} aktualizoval(a) název kanálu z: {oldDisplayName} na: {newDisplayName}", - "mobile.system_message.update_channel_header_message_and_forget.removed": "{username} odstranil záhlaví kanálu (bylo: {oldHeader})", + "mobile.system_message.channel_unarchived_message": "{username} obnovil kanál", + "mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} aktualizoval název kanálu z: {oldDisplayName} na: {newDisplayName}", + "mobile.system_message.update_channel_header_message_and_forget.removed": "{username} odstranil hlavičku kanálu (bylo: {oldHeader})", "mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username} změnil název kanálu z: {oldHeader} na: {newHeader}", - "mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} změnil záhlaví kanálu na: {newHeader}", + "mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} změnil hlavičku kanálu na: {newHeader}", "mobile.system_message.update_channel_purpose_message.removed": "{username} odstranil účel kanálu (byl: {oldPurpose})", "mobile.system_message.update_channel_purpose_message.updated_from": "{username} změnil účel kanálu z: {oldPurpose} na: {newPurpose}", "mobile.system_message.update_channel_purpose_message.updated_to": "{username} změnil účel kanálu na: {newPurpose}", "mobile.tos_link": "Podmínky služby", - "mobile.user_list.deactivated": "Deaktivovat", - "modal.manual_status.auto_responder.message_": "Chceš nastavit status na \"{status}\" a vypnout Automatické odpovědi?", - "modal.manual_status.auto_responder.message_away": "Chceš nastavit svůj status na \"Pryč\" a zrušit Automatické odpovědi?", - "modal.manual_status.auto_responder.message_dnd": "Chceš nastavit svůj status na \"Nerušit\" a vypnout Automatické odpovědi?", - "modal.manual_status.auto_responder.message_offline": "Chceš nastavit svůj status na \"Offline\" a vypnout Automatické odpovědi?", - "modal.manual_status.auto_responder.message_online": "Chceš nastavit svůj status na \"Online\" a vypnout Automatické odpovědi?", + "mobile.user_list.deactivated": "Deaktivováno", + "mobile.write_storage_permission_denied_description": "Uložte soubory na své zařízení. Otevřete Nastavení a udělte {applicationName} přístup pro zápis do souborů na tomto zařízení.", + "modal.manual_status.auto_responder.message_": "Chcete změnit svůj status na „{status}“ a deaktivovat automatické odpovědi?", + "modal.manual_status.auto_responder.message_away": "Chcete nastavit svůj status na \"Pryč\" a zrušit Automatické odpovědi?", + "modal.manual_status.auto_responder.message_dnd": "Chcete nastavit svůj status na \"Nerušit\" a vypnout Automatické odpovědi?", + "modal.manual_status.auto_responder.message_offline": "Chcete nastavit svůj status na \"Offline\" a vypnout Automatické odpovědi?", + "modal.manual_status.auto_responder.message_online": "Chcete nastavit svůj status na \"Online\" a vypnout Automatické odpovědi?", + "more_messages.text": "{count} new {count, plural, one {zpráva} other {zpráv}}", "msg_typing.areTyping": "{users} a {last} píší...", "msg_typing.isTyping": "{user} píše...", + "native.ios.notifications.not_verified": "Tuto notifikaci se nám nepodařilo ověřit se serverem", + "notification.message_not_found": "Zpráva nebyla nalezena", + "notification.no_connection": "Server je nedostupný a nebylo možné získat konkrétní informace o zprávě pro notifikaci.", + "notification.no_post": "Zpráva nebyla nalezena.", + "notification.not_channel_member": "Tato zpráva patří kanálu, ve kterém nejste členem.", + "notification.not_team_member": "Tato zpráva patří týmu, jehož členem nejste.", + "notification_settings.auto_responder": "Automatické Odpovědi", + "notification_settings.auto_responder.default_message": "Dobrý den, jsem mimo kancelář a nemohu odpovědět na zprávy.", + "notification_settings.auto_responder.footer.message": "Nastavte vlastní zprávu, která se automaticky odesílá jako odpověď na přímé zprávy, například odpověď jako mimo kancelář nebo dovolená. Aktivace tohoto nastavení změní váš status na Mimo kancelář a deaktivuje upozornění.", + "notification_settings.auto_responder.message": "Zpráva", + "notification_settings.auto_responder.to.enable": "Povolit automatické odpovědi", + "notification_settings.call_notification": "Upozornění na hovory", + "notification_settings.calls": "Upozornění na hovory", + "notification_settings.calls.callsInfo": "Poznámka: Tichý režim musí být vypnutý, abyste mohli slyšet ukázku vyzvánění.", + "notification_settings.calls.calm": "Klidný", + "notification_settings.calls.cheerful": "Veselý", + "notification_settings.calls.dynamic": "Dynamický", + "notification_settings.calls.enable_sound": "Zvuk upozornění pro příchozí hovory", + "notification_settings.calls.urgent": "Naléhavé", + "notification_settings.calls_off": "Vypnuto", + "notification_settings.calls_on": "Zapnuto", + "notification_settings.email": "Upozornění na e-maily", + "notification_settings.email.crt.emailInfo": "Pokud je aktivováno, každá odpověď na vlákno, které sledujete, vám pošle e-mailové upozornění", + "notification_settings.email.crt.send": "Upozornění na odpovědi ve vlákně", + "notification_settings.email.emailHelp2": "E-mail byl deaktivován vaším správcem systému. Žádná e-mailová upozornění nebudou odesílána, dokud nebude znovu aktivován.", + "notification_settings.email.emailInfo": "E-mailová upozornění jsou odesílána na zmínky a přímé zprávy, když jste offline nebo mimo dosah déle než 5 minut.", + "notification_settings.email.everyHour": "Každou hodinu", + "notification_settings.email.fifteenMinutes": "Každých 15 minut", + "notification_settings.email.immediately": "Okamžitě", + "notification_settings.email.never": "Nikdy", + "notification_settings.email.send": "Odesílat e-mailová upozornění", + "notification_settings.mention.reply": "Odesílat upozornění na odpovědi pro", + "notification_settings.mentions": "Zmínky", + "notification_settings.mentions.channelWide": "Zmínky v celém kanálu", + "notification_settings.mentions.keywords": "Zadejte další klíčová slova", + "notification_settings.mentions.keywordsLabel": "Klíčová slova nejsou citlivá na velikost písmen. Oddělte klíčová slova čárkami.", + "notification_settings.mentions.keywords_mention": "Klíčová slova, která spouští zmínky", + "notification_settings.mentions.sensitiveName": "Vaše jméno s ohledem na velikost písmen", + "notification_settings.mentions.sensitiveUsername": "Vaše uživatelské jméno bez ohledu na velikost písmen", + "notification_settings.mentions_replies": "Zmínky a Odpovědi", + "notification_settings.mobile": "Push upozornění", + "notification_settings.mobile.away": "Pryč nebo mimo dosah", + "notification_settings.mobile.offline": "Mimo dosah", + "notification_settings.mobile.online": "Online, pryč nebo offline", + "notification_settings.mobile.trigger_push": "Spustit push notifikace, když...", + "notification_settings.ooo_auto_responder": "Automatické odpovědi", + "notification_settings.pushNotification.all_new_messages": "Všechny nové zprávy", + "notification_settings.pushNotification.disabled_long": "Push notifikace pro mobilní zařízení byly deaktivovány vaším správcem systému.", + "notification_settings.pushNotification.mentions_only": "Pouze pro zmínky, přímé zprávy a zprávy ve skupinách (výchozí)", + "notification_settings.pushNotification.nothing": "Nic", + "notification_settings.push_notification": "Push Notifikace", + "notification_settings.push_threads.following": "Upozornit mě na odpovědi na vlákna, která sleduji v tomto kanálu", + "notification_settings.push_threads.replies": "Odpovědi ve vlákně", + "notification_settings.send_notification.about": "Upozornit mě na...", + "notification_settings.threads_mentions": "Zmínky ve vláknech", + "notification_settings.threads_start": "Vlákna, která zahajuji", + "notification_settings.threads_start_participate": "Vlákna, která zahajuji nebo se jich účastním", + "onboarding.calls": "Okamžitě začněte zabezpečené audio hovory", + "onboarding.calls_description": "Když psaní není dost rychlé, přepněte z chatu založeného na kanálu na zabezpečené audio hovory jedním klepnutím.", + "onboarding.integrations": "Spojte se s nástroji, které máte rádi", + "onboarding.integrations_description": "Překročte chat s úzce integrovanými produktovými řešeními, která odpovídají běžným vývojovým procesům.", + "onboarding.realtime_collaboration": "Spolupracujte v reálném čase", + "onboarding.realtime_collaboration_description": "Trvalé kanály, přímé zprávy a sdílení souborů fungují bez problémů, takže můžete zůstat ve spojení, ať jste kdekoli.", + "onboarding.welcome": "Vítejte", + "onboaring.welcome_description": "Mattermost je open source platforma pro spolupráci vývojářů. Bezpečná, flexibilní a integrovaná s vašimi nástroji.", "password_send.description": "Chcete-li obnovit heslo, zadejte e-mail adresu, kterou jste použili při registraci", "password_send.error": "Zadejte, prosím, platnou e-mailovou adresu.", + "password_send.generic_error": "Nepodařilo se nám vám odeslat odkaz pro resetování hesla. Obraťte se prosím na svého systémového správce pro pomoc.", "password_send.link": "Pokud účet existuje, email s resetem hesla bude zaslán na:", + "password_send.link.title": "Odkaz na reset byl odeslán", "password_send.reset": "Resetovat heslo", + "password_send.return": "Zpět na přihlášení", + "permalink.error.access.text": "Zpráva, kterou se pokoušíte zobrazit, je v kanálu, ke kterému nemáte přístup, nebo byla smazána.", + "permalink.error.access.title": "Zpráva není zobrazitelná", + "permalink.error.cancel": "Zrušit", + "permalink.error.okay": "Dobře", + "permalink.error.private_channel.button": "Připojit se k kanálu", + "permalink.error.private_channel.text": "Zpráva, kterou se pokoušíte zobrazit, je v soukromém kanálu, do kterého jste nebyli pozváni, ale máte přístup jako administrátor. Chcete se přesto připojit ke kanálu {channelName}**?", + "permalink.error.private_channel.title": "Připojit se k soukromému kanálu", + "permalink.error.private_channel_and_team.button": "Připojit se ke kanálu a týmu", + "permalink.error.private_channel_and_team.text": "Zpráva, kterou se pokoušíte zobrazit, je v soukromém kanálu týmu, jehož nejste členem. Jako administrátor máte přístup. Chcete se připojit ke kanálu {channelName} a týmu {teamName}, abyste ji mohli zobrazit?", + "permalink.error.private_channel_and_team.title": "Připojit se ke soukromému kanálu a týmu", + "permalink.error.public_channel.button": "Připojit se ke kanálu", + "permalink.error.public_channel.text": "Zpráva, kterou se pokoušíte zobrazit, je v kanálu, ke kterému nepatříte. Chcete se připojit ke kanálu {channelName}, abyste ji mohli zobrazit?", + "permalink.error.public_channel.title": "Připojit se ke kanálu", + "permalink.error.public_channel_and_team.button": "Připojit se k kanálu a týmu", + "permalink.error.public_channel_and_team.text": "Zpráva, kterou se pokoušíte zobrazit, je v kanálu, ke kterému nepatříte, a týmu, jehož členem nejste. Chcete se připojit ke kanálu {channelName} a týmu {teamName}, abyste ji mohli zobrazit?", + "permalink.error.public_channel_and_team.title": "Připojit se ke kanálu a týmu", "permalink.show_dialog_warn.cancel": "Zrušit", "permalink.show_dialog_warn.description": "Chystáte se připojit k {channel} bez explicitního přidání správcem kanálu. Opravdu chcete připojit k tomuto soukromému kanálu?", "permalink.show_dialog_warn.join": "Připojit se", "permalink.show_dialog_warn.title": "Připojit se k soukromému kanálu", + "persistent_notifications.confirm.cancel": "Zrušit", + "persistent_notifications.confirm.description": "Zmínění příjemci budou upozorňováni každých {interval, plural, one {minutu} other {{interval} minut}}, dokud nepotvrdí přijetí nebo neodpoví na zprávu.", + "persistent_notifications.confirm.send": "Poslat", + "persistent_notifications.confirm.title": "Odeslat trvalá upozornění", + "persistent_notifications.dm_channel.description": "{username} bude upozorňován každých {interval, plural, one {minutu} other {{interval} minut}}, dokud nepotvrdí přijetí nebo neodpoví na zprávu.", + "persistent_notifications.error.max_recipients.description": "Můžete odeslat trvalá upozornění maximálně {max} příjemcům. Ve vaší zprávě je zmíněno {count} příjemců. Před odesláním budete muset upravit, koho jste zmínili.", + "persistent_notifications.error.max_recipients.title": "Příliš mnoho příjemců", + "persistent_notifications.error.no_mentions.description": "Ve vaší zprávě nejsou zmíněni žádní příjemci. Budete muset přidat zmínky, abyste mohli odeslat trvalá upozornění.", + "persistent_notifications.error.no_mentions.title": "Příjemci musí být zmíněni @mentioned", + "persistent_notifications.error.okay": "Dobře", + "persistent_notifications.error.special_mentions": "Nelze použít @channel, @all nebo @here k zmínění příjemců trvalých upozornění.", + "pinned_messages.empty.paragraph": "Pro připnutí důležitých zpráv dlouze stiskněte zprávu a vyberte možnost „Připnout do kanálu“. Připnuté zprávy budou viditelné pro všechny v tomto kanálu.", + "pinned_messages.empty.title": "Zatím žádné připnuté zprávy", + "plus_menu.browse_channels.title": "Procházet Kanály", + "plus_menu.create_new_channel.title": "Vytvořit Nový kanál", + "plus_menu.invite_people_to_team.title": "Pozvěte lidi do týmu", + "plus_menu.open_direct_message.title": "Otevřít Přímou zprávu", + "post.options.title": "Možnosti", + "post.reactions.title": "Reakce", + "postList.scrollToBottom.newMessages": "Nové zprávy", + "postList.scrollToBottom.newReplies": "Nové odpovědi", "post_body.check_for_out_of_channel_groups_mentions.message": "nebyli notifikováni touto zmínkou, protože nejsou v kanálu. Stejně tak nejsou členy skupiny s tímto kanálem spojené.", "post_body.check_for_out_of_channel_mentions.link.and": " a ", "post_body.check_for_out_of_channel_mentions.link.private": "Pozvěte ostatní do tohoto týmu", @@ -371,18 +938,171 @@ "post_body.check_for_out_of_channel_mentions.message_last": "? Získají přístup k celé historii kanálu.", "post_body.commentedOn": "Okomentoval zprávu od {name}{apostrophe}: ", "post_body.deleted": "(zpráva odstraněna)", - "post_info.auto_responder": "AUTOMATICKÁ ODPOVĚĎ", - "post_info.bot": "BOT", + "post_info.auto_responder": "Automatická Odpověď", + "post_info.bot": "Bot", "post_info.del": "Smazat", "post_info.edit": "Upravit", "post_info.guest": "HOST", "post_info.system": "Systém", "post_message_view.edited": "(upraveno)", "post_priority.button.acknowledge": "Potvrdit", + "post_priority.label.important": "DŮLEŽITÉ", + "post_priority.label.urgent": "NALÉHAVÉ", "post_priority.picker.apply": "Aplikovat", + "post_priority.picker.beta": "BETA", "post_priority.picker.cancel": "Zrušit", + "post_priority.picker.label.important": "Důležité", + "post_priority.picker.label.persistent_notifications": "Odeslat trvalá upozornění", + "post_priority.picker.label.persistent_notifications.description": "Příjemci jsou upozorňováni každých {interval, plural, one {minutu} other {{interval} minut}}, dokud nepotvrdí přijetí nebo neodpoví.", + "post_priority.picker.label.request_ack": "Požádat o potvrzení", + "post_priority.picker.label.request_ack.description": "S vaší zprávou se zobrazí tlačítko pro potvrzení přijetí", + "post_priority.picker.label.standard": "Standardní", + "post_priority.picker.label.urgent": "Naléhavé", + "post_priority.picker.title": "Priorita zprávy", "posts_view.newMsg": "Nové zprávy", + "public_link_copied": "Odkaz zkopírován do schránky", + "rate.button.needs_work": "Potřebuje úpravy", + "rate.button.yes": "Je to skvělé!", + "rate.dont_ask_again": "Neptejte se mě znovu", + "rate.error.text": "Při otevírání okna pro recenzi došlo k chybě.", + "rate.error.title": "Chyba", + "rate.subtitle": "Dejte nám vědět, co si o tom myslíte.", + "rate.title": "Baví vás Mattermost?", + "requested_ack.title": "Požádat o Potvrzení", + "saved_messages.empty.paragraph": "Chcete-li něco uložit na později, dlouze stiskněte zprávu a vyberte možnost „Uložit“ z nabídky. Uložené zprávy jsou viditelné pouze vám.", + "saved_messages.empty.title": "Zatím žádné uložené zprávy", + "screen.channel_files.header.recent_files": "Nedávné Soubory", + "screen.channel_files.results.filter.title": "Filtrovat dle typu souboru", + "screen.mentions.subtitle": "Zprávy, ve kterých jste byli zmíněni", + "screen.mentions.title": "Nedávné Zmínky", + "screen.saved_messages.subtitle": "Všechny zprávy, které jste si uložili k dalšímu zpracování", + "screen.saved_messages.title": "Uložené Zprávy", + "screen.search.header.files": "Soubory", + "screen.search.header.messages": "Zprávy", + "screen.search.modifier.header": "Možnosti vyhledávání", + "screen.search.placeholder": "Hledat zprávy a soubory", + "screen.search.results.file_options.copy_link": "Kopírovat odkaz", + "screen.search.results.file_options.download": "Stáhnout", + "screen.search.results.file_options.open_in_channel": "Otevřít v kanálu", + "screen.search.results.filter.all_file_types": "Všechny typy souborů", + "screen.search.results.filter.audio": "Zvuk", + "screen.search.results.filter.code": "Kód", + "screen.search.results.filter.documents": "Dokumenty", + "screen.search.results.filter.images": "Obrázky", + "screen.search.results.filter.presentations": "Prezentace", + "screen.search.results.filter.spreadsheets": "Tabulky", + "screen.search.results.filter.title": "Filtr podle typu souboru", + "screen.search.results.filter.videos": "Videa", + "screen.search.title": "Hledat", + "screens.channel_bookmark_add": "Přidat záložku", + "screens.channel_bookmark_edit": "Upravit záložku", + "screens.channel_edit": "Upravit Kanál", + "screens.channel_edit_header": "Upravit Záhlaví Kanálu", + "screens.channel_info": "Informace o kanálu", + "screens.channel_info.dm": "Informace o přímé zprávě", + "screens.channel_info.gm": "Informace o skupinové zprávě", "search_bar.search": "Vyhledat", + "search_bar.search.placeholder": "Vyhledat časové pásmo", + "select_team.description": "Ještě nejste členem žádného týmu. Vyberte jeden z níže uvedených, abyste mohli začít.", + "select_team.no_team.description": "Chcete-li se připojit k týmu, požádejte správce týmu o pozvání nebo si vytvořte vlastní tým. Také se můžete podívat do své e-mailové schránky na pozvání.", + "select_team.no_team.title": "Žádné týmy, ke kterým byste se mohli připojit, nejsou k dispozici", + "select_team.title": "Vyberte si tým", + "server.invalid.certificate.description": "Certifikát tohoto serveru je neplatný. \nMůžete se připojovat k serveru, který se vydává za „{hostname}“, což může ohrozit vaše důvěrné informace.", + "server.invalid.certificate.title": "Neplatný SSL certifikát", + "server.invalid.pinning.title": "Neplatný připnutý SSL certifikát", + "server.logout.alert_description": "Všechna přidružená data budou odstraněna", + "server.logout.alert_title": "Opravdu se chcete odhlásit z {displayName}?", + "server.remove.alert_description": "Tímto se server odstraní ze seznamu vašich serverů. Všechna přidružená data budou odstraněna", + "server.remove.alert_title": "Jste si jisti, že chcete odstranit {displayName}?", + "server.tutorial.swipe": "Přejeďte vlevo na serveru, abyste zobrazili další akce", + "server.websocket.unreachable": "Server je nedostupný.", + "server_list.push_proxy_error": "Upozornění nemohou být přijata z tohoto serveru kvůli jeho konfiguraci. Kontaktujte svého systémového administrátora.", + "server_list.push_proxy_unknown": "Upozornění nemohla být přijata z tohoto serveru kvůli jeho konfiguraci. Odhlaste se a znovu přihlaste, abyste to zkusili znovu.", + "server_upgrade.alert_description": "Váš server, {serverDisplayName}, používá verzi serveru, která není podporována. Uživatelé budou čelit problémům s kompatibilitou, které mohou způsobit pády nebo závažné chyby narušující základní funkce aplikace. Je nutné provést aktualizaci na verzi serveru {supportedServerVersion} nebo novější.", + "server_upgrade.dismiss": "Odmítnout", + "server_upgrade.learn_more": "Dovědět se více", + "servers.create_button": "Přidat server", + "servers.default": "Výchozí Server", + "servers.edit": "Upravit", + "servers.login": "Přihlásit se", + "servers.logout": "Odhlásit se", + "servers.remove": "Odstranit", + "settings.about": "O {appTitle}", + "settings.about.app.version": "Verze Aplikace: {version} (Build {number})", + "settings.about.app.version.title": "Verze Aplikace:", + "settings.about.app.version.value": "{version} (Build {number})", + "settings.about.button.copyInfo": "Kopírovat informace", + "settings.about.copyright": "Copyright 2015-{currentYear} Mattermost, Inc. Všechna práva vyhrazena", + "settings.about.database": "Databáze: {driverName}", + "settings.about.database.schema": "Schéma Databáze Verze: {version}", + "settings.about.database.schema.title": "Verze Schéma Databáze:", + "settings.about.database.title": "Databáze:", + "settings.about.licensed": "Licencováno: {company}", + "settings.about.powered_by": "{site} používá Mattermost", + "settings.about.server.version": "Verze Serveru: {version} (Build {buildNumber}", + "settings.about.server.version.noBuild": "Verze Serveru: {version}", + "settings.about.server.version.title": "Verze Serveru:", + "settings.about.server.version.value": "{version} (Build {buildNumber})", + "settings.advanced.cancel": "Zrušit", + "settings.advanced.delete": "Smazat", + "settings.advanced.delete_data": "Smazat místní soubory", + "settings.advanced.delete_message.confirmation": "\nToto smaže všechny soubory stažené prostřednictvím aplikace pro tento server. Prosím potvrďte pro pokračování.\n", + "settings.advanced_settings": "Pokročilá Nastavení", + "settings.display": "Zobrazení", + "settings.link.error.text": "Odkaz nelze otevřít.", + "settings.link.error.title": "Chyba", + "settings.notice_mobile_link": "mobilní aplikace", + "settings.notice_platform_link": "server", + "settings.notice_text": "Mattermost je možný díky softwaru s otevřeným zdrojovým kódem, který se používá na naší {platform} a {mobile}.", + "settings.notifications": "Oznámení", + "settings.save": "Uložit", + "settings_display.clock.mz": "24hodinový formát času", + "settings_display.clock.mz.desc": "Příklad: 16:00", + "settings_display.clock.normal.desc": "Příklad: 4:00 PM", + "settings_display.clock.standard": "12hodinový formát času", + "settings_display.crt.desc": "Když je tato možnost povolena, odpovědní zprávy se v kanálu nezobrazují a budete upozorňováni na vlákna, která sledujete, v zobrazení „Vlákna“.", + "settings_display.crt.label": "Sbalená Vlákna Odpovědí", + "settings_display.custom_theme": "Vlastní Téma", + "settings_display.timezone.automatically": "Nastavit automaticky", + "settings_display.timezone.manual": "Změnit časové pásmo", + "settings_display.timezone.off": "Vypnout", + "settings_display.timezone.select": "Vybrat časovou zónu", + "share_extension.channel_error": "Nejste členem týmu na zvoleném serveru. Zvolte jiný server nebo otevřete Mattermost pro připojení k týmu.", + "share_extension.channel_label": "Kanál", + "share_extension.channels_screen.title": "Vybrat kanál", + "share_extension.count_limit": "Můžete sdílet jen {count, number} {count, plural, one {soubor} other {souborů}} na tomto serveru", + "share_extension.error_screen.description": "Při pokusu o sdílení obsahu do {applicationName} došlo k chybě.", + "share_extension.error_screen.label": "Vyskytla se chyba", + "share_extension.error_screen.reason": "Důvod: {reason}", + "share_extension.file_limit.multiple": "Každý soubor musí být menší než {size}", + "share_extension.file_limit.single": "Soubor musí být menší než {size}", + "share_extension.max_resolution": "Obrázek překročil maximální rozměry 7680 x 4320 pixelů", + "share_extension.message": "Vložit zprávu (volitelné)", + "share_extension.multiple_label": "{count, number} příloh", + "share_extension.server_label": "Server", + "share_extension.servers_screen.title": "Zvolte server", + "share_extension.share_screen.title": "Sdílet do {applicationName}", + "share_extension.upload_disabled": "Nahrávání souborů je zakázáno na tomto serveru", + "share_feedback.button.no": "Ne, děkuji", + "share_feedback.button.yes": "Ano", + "share_feedback.subtitle": "Rádi bychom slyšeli, jak můžeme zlepšit vaši zkušenost.", + "share_feedback.title": "Podělili byste se o svůj názor?", + "skintone_selector.tooltip.description": "Nyní si můžete vybrat odstín pleti, který chcete použít pro své emotikony.", + "skintone_selector.tooltip.title": "Vyberte výchozí odstín pleti", + "smobile.search.recent_title": "Nedávná hledání v {teamName}", + "snack.bar.channel.members.added": "{numMembers, number} {numMembers, plural, one {člen} other {členů}} přidáno", + "snack.bar.favorited.channel": "Tento kanál byl zařazen mezi oblíbené", + "snack.bar.following.thread": "Vlákno sledováno", + "snack.bar.info.copied": "Informace zkopírovány do schránky", + "snack.bar.link.copied": "Odkaz zkopírovaný do schránky", + "snack.bar.message.copied": "Text zkopírován do schránky", + "snack.bar.mute.channel": "Tento kanál byl ztlumen", + "snack.bar.remove.user": "1 člen byl odebrán z kanálu", + "snack.bar.text.copied": "Zkopírováno do schránky", + "snack.bar.undo": "Vrátit zpět", + "snack.bar.unfavorite.channel": "Tento kanál byl odebrán z oblíbených", + "snack.bar.unfollow.thread": "Vlákno odebráno ze sledovaných", + "snack.bar.unmute.channel": "U tohoto kanálu bylo zrušeno ztlumení", "status_dropdown.set_away": "Nepřítomen", "status_dropdown.set_dnd": "Nerušit", "status_dropdown.set_offline": "Offline", @@ -394,22 +1114,57 @@ "suggestion.mention.groups": "Skupinové zmínky", "suggestion.mention.here": "Upozorní každého v kanálu", "suggestion.mention.morechannels": "Ostatní kanály", + "suggestion.mention.nonmembers": "Ne v Kanálu", "suggestion.mention.special": "Speciální zmínky", + "suggestion.mention.users": "Uživatelé", "suggestion.search.direct": "Přímé zprávy", "suggestion.search.private": "Privátní kanál", "suggestion.search.public": "Veřejné kanály", + "system_notice.dont_show": "Nezobrazovat Znovu", + "system_notice.remind_me": "Připomenout později", "system_notice.title.gm_as_dm": "Aktualizace skupinových zpráv", + "system_noticy.body.gm_as_dm": "You will now be notified for all activity in your group messages along with a notification badge for every new message.\n\nToto můžete nakonfigurovat v předvolbách upozornění pro každou skupinovou zprávu.", + "team_list.no_other_teams.description": "Chcete-li se připojit k jinému týmu, požádejte správce týmu o pozvánku nebo si vytvořte vlastní tým.", + "team_list.no_other_teams.title": "Žádné další týmy k připojení", + "terms_of_service.acceptButton": "Přijmout", + "terms_of_service.alert_cancel": "Zrušit", + "terms_of_service.alert_retry": "Zkuste Znovu", "terms_of_service.api_error": "Nelze dokončit požadavek. Pokud tento problém přetrvává, kontaktujte vašeho systémového administrátora.", + "terms_of_service.decline": "Odmítnout", + "terms_of_service.error.description": "Nepodařilo se získat podmínky služby ze serveru.", + "terms_of_service.error.logout": "Odhlášení", + "terms_of_service.error.retry": "Opakovat", + "terms_of_service.error.title": "Nepodařilo se získat podmínky služby (ToS).", + "terms_of_service.terms_declined.ok": "Dobře", + "terms_of_service.terms_declined.text": "Musíte přijmout podmínky služby, abyste získali přístup k tomuto serveru. Kontaktujte svého systémového administrátora pro více informací. Nyní budete odhlášeni. Přihlaste se znovu, abyste přijali podmínky služby.", + "terms_of_service.terms_declined.title": "Musíte přijmout podmínky služby", + "terms_of_service.title": "Podmínky Služby", + "thread.header.thread": "Vlákno", + "thread.header.thread_in": "v {channelName}", + "thread.loadingReplies": "Načítám odpovědi...", + "thread.noReplies": "Zatím žádné odpovědi", + "thread.options.title": "Akce vlákna", + "thread.repliesCount": "{repliesCount, number}{repliesCount, plural, one {odpověď} other {odpovědí}}", "threads": "Vlákno", "threads.deleted": "Původní zpráva smazána", + "threads.end_of_list.subtitle": "Pokud hledáte starší konverzace, zkuste místo toho vyhledávat", + "threads.end_of_list.title": "To je konec seznamu!", "threads.follow": "Následovat", "threads.followMessage": "Sledovat zprávu", "threads.followThread": "Sledovat vlákno", "threads.following": "Následuji", "threads.newReplies": "{počet} nový {počet, množné číslo, jeden {odpověď} další {odpovědi}}", - "threads.replies": "{počet} nový {počet, množné číslo, jeden {odpověď} další {odpovědi}}", + "threads.replies": "{count} {count, plural, one {odpověď} other {odpovědi}}", "threads.unfollowMessage": "Přestat Sledovat zprávu", "threads.unfollowThread": "Ukončit sledování vlákna", + "unreads.empty.paragraph": "Vypněte filtr na nepřečtené zprávy, abyste zobrazili všechny své kanály.", + "unreads.empty.show_all": "Zobrazit vše", + "unreads.empty.title": "Žádné další nepřečtené", + "unsupported_server.message": "Váš server, {serverDisplayName}, používá verzi serveru, která není podporována. Můžete se setkat s problémy s kompatibilitou, které mohou způsobit pády nebo závažné chyby narušující základní funkce aplikace. Kontaktujte svého systémového administrátora, aby provedl aktualizaci vašeho serveru Mattermost.", + "unsupported_server.title": "Nepodporovaná verze serveru", + "user.edit_profile.email.auth_service": "Přihlášení probíhá prostřednictvím {service}. E-mail nelze aktualizovat. E-mailová adresa používaná pro upozornění je {email}.", + "user.edit_profile.email.web_client": "E-mail musí být aktualizován pomocí webového klienta nebo desktopové aplikace.", + "user.edit_profile.profile_photo.change_photo": "Změnit profilovou fotku", "user.settings.general.email": "Email", "user.settings.general.field_handled_externally": "Toto pole je zpracováno prostřednictvím vašeho poskytovatele přihlášení. Pokud chcete toto změnit, musíte tak učinit prostřednictvím vašeho poskytovatele přihlášení.", "user.settings.general.firstName": "Křestní jméno", @@ -417,5 +1172,16 @@ "user.settings.general.nickname": "Přezdívka", "user.settings.general.position": "Pozice", "user.settings.general.username": "Uživatelské jméno", - "user.settings.notifications.email_threads.description": "Upozornit mě na všechny odpovědi na vlákna, která sleduji" + "user.settings.notifications.email_threads.description": "Upozornit mě na všechny odpovědi na vlákna, která sleduji", + "user.tutorial.long_press": "Dlouze stiskněte položku, abyste zobrazili profil uživatele", + "user_profile.custom_status": "Vlastní status", + "user_status.away": "Pryč", + "user_status.dnd": "Nerušit", + "user_status.offline": "Offline", + "user_status.online": "Online", + "user_status.title": "Status", + "video.download": "Stáhnout video", + "video.download_description": "Video musí být staženo, aby mohlo být přehráno.", + "video.failed_description": "Při pokusu o přehrání videa došlo k chybě.", + "your.servers": "Vaše servery" } diff --git a/assets/base/i18n/de.json b/assets/base/i18n/de.json index 2ec38c8bdc3..93bddc80cb9 100644 --- a/assets/base/i18n/de.json +++ b/assets/base/i18n/de.json @@ -96,6 +96,28 @@ "camera_type.video.option": "Video aufnehmen", "center_panel.archived.closeChannel": "Kanal schließen", "channel_add_members.add_members.button": "Mitglieder hinzufügen", + "channel_bookmark.add.detail_title": "Titel", + "channel_bookmark.add.emoji": "Emoji hinzufügen", + "channel_bookmark.add.failed_title": "Fehler beim Hinzufügen eines Lesezeichens", + "channel_bookmark.add.file_cancel": "Abbrechen", + "channel_bookmark.add.file_title": "Anhang", + "channel_bookmark.add.file_upload_error": "Fehler beim Hochladen der Datei. Bitte versuche es erneut.", + "channel_bookmark.add.file_uploading": "Hochladen... ({progress}%)", + "channel_bookmark.add_edit.failed_desc": "Details: {error}", + "channel_bookmark.copy_option": "Link kopieren", + "channel_bookmark.delete.confirm": "Willst du das Lesezeichen {displayName} wirklich löschen?", + "channel_bookmark.delete.confirm_title": "Lesezeichen löschen", + "channel_bookmark.delete.failed_detail": "Details: {error}", + "channel_bookmark.delete.failed_title": "Fehler beim Löschen des Lesezeichens", + "channel_bookmark.delete.yes": "Ja", + "channel_bookmark.delete_option": "Löschen", + "channel_bookmark.edit.failed_title": "Fehler beim Bearbeiten des Lesezeichens", + "channel_bookmark.edit.save_button": "Speichern", + "channel_bookmark.edit_option": "Bearbeiten", + "channel_bookmark.share_option": "Teilen", + "channel_bookmark_add.link": "Link", + "channel_bookmark_add.link.input.description": "Füge einen Link zu einer beliebigen Nachricht, einer Datei oder einem externen Link hinzu", + "channel_bookmark_add.link.invalid": "Bitte gib einen gültigen Link ein", "channel_files.empty.paragraph": "Dateien, die in diesem Kanal gepostet wurden, werden hier angezeigt.", "channel_files.empty.title": "Noch keine Dateien", "channel_files.noFiles.paragraph": "Dieser Kanal enthält keine Dateien mit den angewandten Filtern", @@ -103,6 +125,10 @@ "channel_header.directchannel.you": "{displayName} (Du)", "channel_header.info": "Zeige Info", "channel_header.member_count": "{count, plural, one {# Teilnehmer} other {# Teilnehmer}}", + "channel_info.add_bookmark": "Lesezeichen hinzufügen", + "channel_info.add_bookmark.file": "Datei anhängen", + "channel_info.add_bookmark.link": "Link hinzufügen", + "channel_info.add_bookmark.max_reached": "Dieser Kanal hat die maximale Anzahl an Lesezeichen erreicht.", "channel_info.add_members": "Mitglieder hinzufügen", "channel_info.alertNo": "Nein", "channel_info.alertYes": "Ja", @@ -445,9 +471,9 @@ "mobile.calls_call_ended": "Anruf beendet", "mobile.calls_call_screen": "Anruf", "mobile.calls_call_thread": "Call Unterhaltung", + "mobile.calls_cancel": "Abbrechen", "mobile.calls_captions": "Untertitel", "mobile.calls_captions_turned_on": "Live-Untertitel eingeschaltet", - "mobile.calls_current_call": "Aktueller Anruf", "mobile.calls_disable": "Anrufe deaktivieren", "mobile.calls_dismiss": "Verwerfen", "mobile.calls_enable": "Anrufe aktivieren", @@ -460,21 +486,32 @@ "mobile.calls_ended_at": "Beendet am", "mobile.calls_error_message": "Fehler: {error}", "mobile.calls_error_title": "Fehler", + "mobile.calls_group_calls_not_available": "Anrufe sind nur in Direktnachrichten möglich.", "mobile.calls_headset": "Kopfhörer", "mobile.calls_hide_cc": "Live-Untertitel ausblenden", "mobile.calls_host": "Gastgeber", "mobile.calls_host_controls": "Gastgeber-Kontrollen", + "mobile.calls_host_end_confirm": "Anruf für alle beenden", + "mobile.calls_host_leave_confirm": "Anruf verlassen", + "mobile.calls_host_leave_title": "Bist du sicher, dass du diesen Anruf beenden willst?", "mobile.calls_host_rec": "Du zeichnest diese Besprechung auf. Bitte informiere alle Teilnehmer darüber, dass diese Sitzung aufgezeichnet wird.", "mobile.calls_host_rec_error": "Bitte versuche, die Aufzeichnung zu wiederholen. Du kannst dich auch an deinen Systemadministrator wenden, um Hilfe bei der Fehlerbehebung zu erhalten.", "mobile.calls_host_rec_error_title": "Bei der Aufnahme ist etwas schief gelaufen", + "mobile.calls_host_rec_stop_body": "Die Gesprächsaufzeichnung wird verarbeitet und in der Gesprächs-Unterhaltung gepostet. Bist du sicher, dass du die Aufzeichnung beenden willst?", + "mobile.calls_host_rec_stop_confirm": "Aufnahme stoppen", + "mobile.calls_host_rec_stop_title": "Aufnahme stoppen", "mobile.calls_host_rec_stopped": "Du kannst die Aufzeichnung in der Unterhaltung dieses Anrufs finden, sobald die Verarbeitung abgeschlossen ist.", "mobile.calls_host_rec_stopped_title": "Die Aufnahme wurde gestoppt. Verarbeitung...", "mobile.calls_host_rec_title": "Sie zeichnest gerade auf", + "mobile.calls_host_rec_trans_stop_body": "Die Mitschnitt- und Transkriptionsdateien werden verarbeitet und in der Anruf-Unterhaltung veröffentlicht. Bist du sicher, dass du die Aufzeichnung und Transkription beenden möchtest?", + "mobile.calls_host_rec_trans_stop_title": "Aufzeichnung und Transkription beenden", "mobile.calls_host_transcription": "Informiere alle Teilnehmer darüber, dass dieses Treffen aufgezeichnet und protokolliert wird.", "mobile.calls_host_transcription_title": "Aufnahme und Transkription haben begonnen", "mobile.calls_incoming_dm": "{name} lädt dich zu einem Anruf ein", "mobile.calls_incoming_gm": "{name} lädt dich zu einem Anruf mit {num, plural, one {einem anderen} other {# anderen}} ein", + "mobile.calls_join": "Beitreten", "mobile.calls_join_call": "Am Anruf teilnehmen", + "mobile.calls_joining": "Teilnehmen...", "mobile.calls_lasted": "Dauer {duration}", "mobile.calls_leave": "Verlassen", "mobile.calls_leave_call": "Anruf verlassen", @@ -489,7 +526,6 @@ "mobile.calls_mute_others": "Andere stummschalten", "mobile.calls_mute_participant": "Teilnehmer stummschalten", "mobile.calls_name_is_talking_postfix": "spricht...", - "mobile.calls_name_started_call": "{name} hat einen Anruf gestartet", "mobile.calls_noone_talking": "Keiner redet", "mobile.calls_not_available_msg": "Bitte wende dich an deinen Systemadministrator, um diese Funktion zu aktivieren.", "mobile.calls_not_available_option": "(Nicht verfügbar)", @@ -510,7 +546,6 @@ "mobile.calls_raise_hand": "Hand heben", "mobile.calls_raised_hand": "{name} {num, plural, =0 { hob eine Hand} other {+# mehr hoben eine Hand}}", "mobile.calls_react": "Reaktion", - "mobile.calls_rec": "rec", "mobile.calls_record": "Aufnehmen", "mobile.calls_recording_start_in_progress": "Eine Aufzeichnung ist bereits im Gange.", "mobile.calls_recording_start_no_permissions": "Du hast nicht die Berechtigung, eine Aufzeichnung zu starten. Bitte frage den Gesprächsleiter, ob er eine Aufzeichnung starten darf.", @@ -529,6 +564,8 @@ "mobile.calls_speaker": "Lautsprecher", "mobile.calls_start_call": "Anruf starten", "mobile.calls_start_call_exists": "In dem Kanal wird bereits ein Call geführt.", + "mobile.calls_started_call": "Anfruf gestartet", + "mobile.calls_starting": "Starten...", "mobile.calls_stop_recording": "Aufnahme stoppen", "mobile.calls_stop_screenshare": "Bildschirmfreigabe beenden", "mobile.calls_tablet": "Tablett", @@ -620,11 +657,11 @@ "mobile.link.error.title": "Fehler", "mobile.login_options.cant_heading": "Kann mich nicht anmelden", "mobile.login_options.enter_credentials": "Gib unten deine Anmeldedaten ein.", + "mobile.login_options.entraid": "Entra ID", "mobile.login_options.gitlab": "GitLab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "Bei deinem Konto anmelden", "mobile.login_options.none": "Du kannst dich noch nicht bei deinem Konto anmelden. Es muss mindestens eine Anmeldeoption konfiguriert sein. Kontaktieren deinen Systemadministrator für Hilfe.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Wähle unten eine Anmeldeoption.", @@ -645,9 +682,7 @@ "mobile.manage_members.section_title_members": "MITGLIEDER", "mobile.managed.blocked_by": "Blockiert durch {vendor}", "mobile.managed.exit": "Beenden", - "mobile.managed.jailbreak": "Geräten mit Jailbreak wird von {vendor} nicht vertraut.\n\nGrund {reason}\n\n\n\nDebug Information: {debug}\n\nBItte die App verlassen.", - "mobile.managed.jailbreak_no_debug_info": "Nicht verfügbar", - "mobile.managed.jailbreak_no_reason": "Nicht verfügbar", + "mobile.managed.jailbreak": "Geräten mit Jailbreak wird von {vendor} nicht vertraut.\n\nDie App wird beendet.", "mobile.managed.not_secured.android": "Dieses Gerät muss mit einer Bildschirmsperre gesichert werden, um Mattermost verwenden zu können.", "mobile.managed.not_secured.ios": "Dieses Gerät muss mit einem Passcode gesichert werden, um Mattermost verwenden zu können.\n \nGehe zu Einstellungen > Face ID & Passwort.", "mobile.managed.not_secured.ios.touchId": "Dieses Gerät muss mit einem Passcode gesichert werden, um Mattermost zu verwenden.\n \nGehe zu Einstellungen > Touch ID & Passwort.", @@ -669,8 +704,9 @@ "mobile.oauth.failed_to_login": "Dein Anmeldeversuch ist fehlgeschlagen. Bitte nochmal versuchen.", "mobile.oauth.failed_to_open_link": "Der Link konnte nicht geöffnet werden. Bitte nochmal versuchen.", "mobile.oauth.failed_to_open_link_no_browser": "Der Link konnte nicht geöffnet werden. Bitte stelle sicher, dass ein Browser auf dem Gerät installiert ist.", - "mobile.oauth.something_wrong": "Etwas ist schief gelaufen", "mobile.oauth.something_wrong.okButton": "OK", + "mobile.oauth.success.description": "Melde jetzt an, nur einen Moment...", + "mobile.oauth.success.title": "Authentifizierung erfolgreich", "mobile.oauth.switch_to_browser": "Du wirst zu deinem Login-Anbieter weitergeleitet", "mobile.oauth.switch_to_browser.error_title": "Fehler bei der Anmeldung", "mobile.oauth.switch_to_browser.title": "Weiterleitung...", @@ -791,6 +827,16 @@ "notification_settings.auto_responder.footer.message": "Lege eine benutzerdefinierte Nachricht fest, die automatisch als Antwort auf Direktnachrichten gesendet wird, wie z.B. eine Abwesenheits- oder Urlaubsantwort. Wenn du diese Einstellung aktivierst, wird dein Status auf \"Abwesend\" geändert und die Benachrichtigungen werden deaktiviert.", "notification_settings.auto_responder.message": "Nachricht", "notification_settings.auto_responder.to.enable": "Automatische Antworten aktivieren", + "notification_settings.call_notification": "Anrufbenachrichtigungen", + "notification_settings.calls": "Anrufbenachrichtigungen", + "notification_settings.calls.callsInfo": "Hinweis: Der stille Modus muss ausgeschaltet sein, um die Klingeltonvorschau zu hören.", + "notification_settings.calls.calm": "Ruhig", + "notification_settings.calls.cheerful": "Fröhlich", + "notification_settings.calls.dynamic": "Dynamisch", + "notification_settings.calls.enable_sound": "Benachrichtigungston für eingehende Anrufe", + "notification_settings.calls.urgent": "Dringend", + "notification_settings.calls_off": "Aus", + "notification_settings.calls_on": "An", "notification_settings.email": "E-Mail-Benachrichtigungen", "notification_settings.email.crt.emailInfo": "Wenn aktiviert, wird jede Antwort in einer Unterhaltung, der du folgst, eine E-Mail Benachrichtigung auslösen", "notification_settings.email.crt.send": "Benachrichtigungen über Antworten auf Unterhaltungen", @@ -948,6 +994,8 @@ "screen.search.results.filter.title": "Nach Dateityp filtern", "screen.search.results.filter.videos": "Videos", "screen.search.title": "Suche", + "screens.channel_bookmark_add": "Lesezeichen hinzufügen", + "screens.channel_bookmark_edit": "Lesezeichen bearbeiten", "screens.channel_edit": "Kanal bearbeiten", "screens.channel_edit_header": "Kanalüberschrift bearbeiten", "screens.channel_info": "Kanal-Infos", @@ -961,6 +1009,7 @@ "select_team.title": "Wähle ein Team", "server.invalid.certificate.description": "Das Zertifikat für diesen Server ist ungültig.\nMöglicherweise stellen Sie eine Verbindung zu einem Server her, der vorgibt, \"{hostname}\" zu sein, wodurch Ihre vertraulichen Daten gefährdet werden könnten.", "server.invalid.certificate.title": "Ungültiges SSL-Zertifikat", + "server.invalid.pinning.title": "Ungültiges gepinntes SSL Zertifikat", "server.logout.alert_description": "Alle zugehörigen Daten werden entfernt", "server.logout.alert_title": "Bist du sicher, dass du dich bei {displayName} abmelden möchtest?", "server.remove.alert_description": "Dadurch wird er aus deiner Serverliste entfernt. Alle zugehörigen Daten werden entfernt", @@ -993,7 +1042,7 @@ "settings.about.server.version": "Server Version: {version} (Build {buildNumber}", "settings.about.server.version.noBuild": "Server Version: {version}", "settings.about.server.version.title": "Server-Version:", - "settings.about.server.version.value": "{version} (Build {number})", + "settings.about.server.version.value": "{version} (Build {buildNumber})", "settings.advanced.cancel": "Abbrechen", "settings.advanced.delete": "Löschen", "settings.advanced.delete_data": "Lokale Dateien löschen", @@ -1042,6 +1091,7 @@ "skintone_selector.tooltip.title": "Wählen deinen Standard-Hautton", "smobile.search.recent_title": "Letzte Suchen in {teamName}", "snack.bar.channel.members.added": "{numMembers, number} {numMembers, plural, one {Mitglied} other {Mitglieder}} hinzugefügt", + "snack.bar.code.copied": "Code in die Zwischenablage kopiert", "snack.bar.favorited.channel": "Dieser Kanal wurde favorisiert", "snack.bar.following.thread": "Unterhaltung gefolgt", "snack.bar.info.copied": "Info in die Zwischenablage kopiert", @@ -1065,6 +1115,7 @@ "suggestion.mention.groups": "Gruppenerwähnungen", "suggestion.mention.here": "Benachrichtigt jeden in diesem Kanal", "suggestion.mention.morechannels": "Andere Kanäle", + "suggestion.mention.nonmembers": "Nicht im Kanal", "suggestion.mention.special": "Spezielle Erwähnungen", "suggestion.mention.users": "Benutzer", "suggestion.search.direct": "Direktnachricht", diff --git a/assets/base/i18n/el.json b/assets/base/i18n/el.json index 85806a9dfcd..74a83cfa601 100644 --- a/assets/base/i18n/el.json +++ b/assets/base/i18n/el.json @@ -213,9 +213,6 @@ "mobile.message_length.message_split_left": "Το μήνυμα υπερβαίνει το όριο χαρακτήρων", "mobile.message_length.title": "Μήκος Μηνύματος", "mobile.oauth.failed_to_login": "Η απόπειρα σύνδεσής σας απέτυχε. Παρακαλώ προσπαθήστε ξανά.", - "mobile.oauth.failed_to_open_link": "Απέτυχε το άνοιγμα του συνδέσμου. Παρακαλώ προσπαθήστε ξανά.", - "mobile.oauth.failed_to_open_link_no_browser": "Απέτυχε το άνοιγμα του συνδέσμου. Βεβαιωθείτε ότι έχει εγκατασταθεί πρόγραμμα περιήγησης στον τρέχοντα χώρο.", - "mobile.oauth.something_wrong": "Κάτι πήγε στραβά", "mobile.oauth.switch_to_browser": "Παρακαλώ χρησιμοποιήστε το πρόγραμμα περιήγησής σας για να ολοκληρώσετε τη διαδικασία σύνδεσης.", "mobile.oauth.try_again": "Προσπαθήστε ξανά", "mobile.open_dm.error": "Δεν ήταν δυνατό να ανοίξουμε ένα άμεσο μήνυμα με το {displayName}. Ελέγξτε τη σύνδεσή σας και δοκιμάστε ξανά.", diff --git a/assets/base/i18n/en.json b/assets/base/i18n/en.json index dc7b077edca..ca7e5c8b46d 100644 --- a/assets/base/i18n/en.json +++ b/assets/base/i18n/en.json @@ -96,6 +96,28 @@ "camera_type.video.option": "Record Video", "center_panel.archived.closeChannel": "Close Channel", "channel_add_members.add_members.button": "Add Members", + "channel_bookmark_add.link": "Link", + "channel_bookmark_add.link.input.description": "Add a link to any post, file, or any external link", + "channel_bookmark_add.link.invalid": "Please enter a valid link", + "channel_bookmark.add_edit.failed_desc": "Details: {error}", + "channel_bookmark.add.detail_title": "Title", + "channel_bookmark.add.emoji": "Add emoji", + "channel_bookmark.add.failed_title": "Error adding bookmark", + "channel_bookmark.add.file_cancel": "Cancel", + "channel_bookmark.add.file_title": "Attachment", + "channel_bookmark.add.file_upload_error": "Error uploading file. Please try again.", + "channel_bookmark.add.file_uploading": "Uploading... ({progress}%)", + "channel_bookmark.copy_option": "Copy Link", + "channel_bookmark.delete_option": "Delete", + "channel_bookmark.delete.confirm": "You sure want to delete the bookmark {displayName}?", + "channel_bookmark.delete.confirm_title": "Delete bookmark", + "channel_bookmark.delete.failed_detail": "Details: {error}", + "channel_bookmark.delete.failed_title": "Error deleting bookmark", + "channel_bookmark.delete.yes": "Yes", + "channel_bookmark.edit_option": "Edit", + "channel_bookmark.edit.failed_title": "Error editing bookmark", + "channel_bookmark.edit.save_button": "Save", + "channel_bookmark.share_option": "Share", "channel_files.empty.paragraph": "Files posted in this channel will show here.", "channel_files.empty.title": "No files yet", "channel_files.noFiles.paragraph": "This channel doesn't contain any files with the applied filters", @@ -103,6 +125,10 @@ "channel_header.directchannel.you": "{displayName} (you)", "channel_header.info": "View info", "channel_header.member_count": "{count, plural, one {# member} other {# members}}", + "channel_info.add_bookmark": "Add a bookmark", + "channel_info.add_bookmark.file": "Attach a file", + "channel_info.add_bookmark.link": "Add a link", + "channel_info.add_bookmark.max_reached": "This channel has reached the maximum number of bookmarks.", "channel_info.add_members": "Add members", "channel_info.alert_retry": "Try Again", "channel_info.alertNo": "No", @@ -445,9 +471,9 @@ "mobile.calls_call_ended": "Call ended", "mobile.calls_call_screen": "Call", "mobile.calls_call_thread": "Call Thread", + "mobile.calls_cancel": "Cancel", "mobile.calls_captions": "Captions", "mobile.calls_captions_turned_on": "Live captions turned on", - "mobile.calls_current_call": "Current call", "mobile.calls_disable": "Disable calls", "mobile.calls_dismiss": "Dismiss", "mobile.calls_enable": "Enable calls", @@ -460,21 +486,32 @@ "mobile.calls_ended_at": "Ended at", "mobile.calls_error_message": "Error: {error}", "mobile.calls_error_title": "Error", + "mobile.calls_group_calls_not_available": "Calls are only available in DM channels.", "mobile.calls_headset": "Headset", "mobile.calls_hide_cc": "Hide live captions", "mobile.calls_host": "host", "mobile.calls_host_controls": "Host controls", + "mobile.calls_host_end_confirm": "End call for everyone", + "mobile.calls_host_leave_confirm": "Leave call", + "mobile.calls_host_leave_title": "Are you sure you want to leave this call?", "mobile.calls_host_rec": "You are recording this meeting. Consider letting everyone know that this meeting is being recorded.", "mobile.calls_host_rec_error": "Please try to record again. You can also contact your system admin for troubleshooting help.", "mobile.calls_host_rec_error_title": "Something went wrong with the recording", + "mobile.calls_host_rec_stop_body": "The call recording will be processed and posted in the call thread. Are you sure you want to stop the recording?", + "mobile.calls_host_rec_stop_confirm": "Stop recording", + "mobile.calls_host_rec_stop_title": "Stop recording", "mobile.calls_host_rec_stopped": "You can find the recording in this call's chat thread once it's finished processing.", "mobile.calls_host_rec_stopped_title": "Recording has stopped. Processing...", "mobile.calls_host_rec_title": "You are recording", + "mobile.calls_host_rec_trans_stop_body": "The call recording and transcription files will be processed and posted in the call thread. Are you sure you want to stop the recording and transcription?", + "mobile.calls_host_rec_trans_stop_title": "Stop recording and transcription", "mobile.calls_host_transcription": "Consider letting everyone know that this meeting is being recorded and transcribed.", "mobile.calls_host_transcription_title": "Recording and transcription has started", "mobile.calls_incoming_dm": "{name} is inviting you to a call", "mobile.calls_incoming_gm": "{name} is inviting you to a call with {num, plural, one {# other} other {# others}}", + "mobile.calls_join": "Join", "mobile.calls_join_call": "Join call", + "mobile.calls_joining": "Joining...", "mobile.calls_lasted": "Lasted {duration}", "mobile.calls_leave": "Leave", "mobile.calls_leave_call": "Leave call", @@ -489,7 +526,6 @@ "mobile.calls_mute_others": "Mute others", "mobile.calls_mute_participant": "Mute participant", "mobile.calls_name_is_talking_postfix": "is talking...", - "mobile.calls_name_started_call": "{name} started a call", "mobile.calls_noone_talking": "No one is talking", "mobile.calls_not_available_msg": "Please contact your System Admin to enable the feature.", "mobile.calls_not_available_option": "(Not available)", @@ -510,7 +546,6 @@ "mobile.calls_raise_hand": "Raise hand", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# more }}raised a hand", "mobile.calls_react": "React", - "mobile.calls_rec": "rec", "mobile.calls_record": "Record", "mobile.calls_recording_start_in_progress": "A recording is already in progress.", "mobile.calls_recording_start_no_permissions": "You don't have permissions to start a recording. Please ask the call host to start a recording.", @@ -529,6 +564,8 @@ "mobile.calls_speaker": "Speaker", "mobile.calls_start_call": "Start Call", "mobile.calls_start_call_exists": "A call is already ongoing in the channel.", + "mobile.calls_started_call": "Call started", + "mobile.calls_starting": "Starting...", "mobile.calls_stop_recording": "Stop Recording", "mobile.calls_stop_screenshare": "Stop screen share", "mobile.calls_tablet": "Tablet", @@ -620,11 +657,11 @@ "mobile.link.error.title": "Error", "mobile.login_options.cant_heading": "Can't Log In", "mobile.login_options.enter_credentials": "Enter your login details below.", + "mobile.login_options.entraid": "Entra ID", "mobile.login_options.gitlab": "GitLab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "Log In to Your Account", "mobile.login_options.none": "You can't log in to your account yet. At least one login option must be configured. Contact your System Admin for assistance.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Select a login option below.", @@ -645,9 +682,7 @@ "mobile.manage_members.section_title_members": "MEMBERS", "mobile.managed.blocked_by": "Blocked by {vendor}", "mobile.managed.exit": "Exit", - "mobile.managed.jailbreak": "Jailbroken devices are not trusted by {vendor}.\n\nReason {reason}\n\n\n\nDebug info: {debug}\n\nPlease exit the app.", - "mobile.managed.jailbreak_no_debug_info": "Not available", - "mobile.managed.jailbreak_no_reason": "Not available", + "mobile.managed.jailbreak": "Jailbroken or rooted devices are not trusted by {vendor}.\n\nThe app will now close.", "mobile.managed.not_secured.android": "This device must be secured with a screen lock to use Mattermost.", "mobile.managed.not_secured.ios": "This device must be secured with a passcode to use Mattermost.\n\nGo to Settings > Face ID & Passcode.", "mobile.managed.not_secured.ios.touchId": "This device must be secured with a passcode to use Mattermost.\n\nGo to Settings > Touch ID & Passcode.", @@ -669,8 +704,9 @@ "mobile.oauth.failed_to_login": "Your login attempt failed. Please try again.", "mobile.oauth.failed_to_open_link": "The link failed to open. Please try again.", "mobile.oauth.failed_to_open_link_no_browser": "The link failed to open. Please verify that a browser is installed on the device.", - "mobile.oauth.something_wrong": "Something went wrong", "mobile.oauth.something_wrong.okButton": "OK", + "mobile.oauth.success.description": "Signing in now, just a moment...", + "mobile.oauth.success.title": "Authentication successful", "mobile.oauth.switch_to_browser": "You are being redirected to your login provider", "mobile.oauth.switch_to_browser.error_title": "Sign in error", "mobile.oauth.switch_to_browser.title": "Redirecting...", @@ -786,6 +822,16 @@ "notification_settings.auto_responder.footer.message": "Set a custom message that is automatically sent in response to direct messages, such as an out of office or vacation reply. Enabling this setting changes your status to Out of Office and disables notifications.", "notification_settings.auto_responder.message": "Message", "notification_settings.auto_responder.to.enable": "Enable automatic replies", + "notification_settings.call_notification": "Call Notifications", + "notification_settings.calls": "Call Notifications", + "notification_settings.calls_off": "Off", + "notification_settings.calls_on": "On", + "notification_settings.calls.callsInfo": "Note: silent mode must be off to hear the ringtone preview.", + "notification_settings.calls.calm": "Calm", + "notification_settings.calls.cheerful": "Cheerful", + "notification_settings.calls.dynamic": "Dynamic", + "notification_settings.calls.enable_sound": "Notification sound for incoming calls", + "notification_settings.calls.urgent": "Urgent", "notification_settings.email": "Email Notifications", "notification_settings.email.crt.emailInfo": "When enabled, any reply to a thread you're following will send an email notification", "notification_settings.email.crt.send": "Thread reply notifications", @@ -948,6 +994,8 @@ "screen.search.results.filter.title": "Filter by file type", "screen.search.results.filter.videos": "Videos", "screen.search.title": "Search", + "screens.channel_bookmark_add": "Add a bookmark", + "screens.channel_bookmark_edit": "Edit bookmark", "screens.channel_edit": "Edit Channel", "screens.channel_edit_header": "Edit Channel Header", "screens.channel_info": "Channel Info", @@ -966,6 +1014,7 @@ "server_upgrade.learn_more": "Learn More", "server.invalid.certificate.description": "The certificate for this server is invalid.\nYou might be connecting to a server that is pretending to be “{hostname}” which could put your confidential information at risk.", "server.invalid.certificate.title": "Invalid SSL certificate", + "server.invalid.pinning.title": "Invalid pinned SSL certificate", "server.logout.alert_description": "All associated data will be removed", "server.logout.alert_title": "Are you sure you want to log out of {displayName}?", "server.remove.alert_description": "This will remove it from your list of servers. All associated data will be removed", @@ -1004,7 +1053,7 @@ "settings.about.server.version": "Server Version: {version} (Build {buildNumber}", "settings.about.server.version.noBuild": "Server Version: {version}", "settings.about.server.version.title": "Server Version:", - "settings.about.server.version.value": "{version} (Build {number})", + "settings.about.server.version.value": "{version} (Build {buildNumber})", "settings.advanced_settings": "Advanced Settings", "settings.advanced.cancel": "Cancel", "settings.advanced.delete": "Delete", @@ -1042,6 +1091,7 @@ "skintone_selector.tooltip.title": "Choose your default skin tone", "smobile.search.recent_title": "Recent searches in {teamName}", "snack.bar.channel.members.added": "{numMembers, number} {numMembers, plural, one {member} other {members}} added", + "snack.bar.code.copied": "Code copied to clipboard", "snack.bar.favorited.channel": "This channel was favorited", "snack.bar.following.thread": "Thread followed", "snack.bar.info.copied": "Info copied to clipboard", @@ -1065,6 +1115,7 @@ "suggestion.mention.groups": "Group Mentions", "suggestion.mention.here": "Notifies everyone online in this channel", "suggestion.mention.morechannels": "Other Channels", + "suggestion.mention.nonmembers": "Not in Channel", "suggestion.mention.special": "Special Mentions", "suggestion.mention.users": "Users", "suggestion.search.direct": "Direct Messages", diff --git a/assets/base/i18n/en_AU.json b/assets/base/i18n/en_AU.json index c49d823c1d1..9109864c572 100644 --- a/assets/base/i18n/en_AU.json +++ b/assets/base/i18n/en_AU.json @@ -96,6 +96,28 @@ "camera_type.video.option": "Record Video", "center_panel.archived.closeChannel": "Close Channel", "channel_add_members.add_members.button": "Add Members", + "channel_bookmark.add.detail_title": "Title", + "channel_bookmark.add.emoji": "Add emoji", + "channel_bookmark.add.failed_title": "Error adding bookmark", + "channel_bookmark.add.file_cancel": "Cancel", + "channel_bookmark.add.file_title": "Attachment", + "channel_bookmark.add.file_upload_error": "Error uploading file. Please try again.", + "channel_bookmark.add.file_uploading": "Uploading... ({progress}%)", + "channel_bookmark.add_edit.failed_desc": "Details: {error}", + "channel_bookmark.copy_option": "Copy Link", + "channel_bookmark.delete.confirm": "You sure want to delete the bookmark {displayName}?", + "channel_bookmark.delete.confirm_title": "Delete bookmark", + "channel_bookmark.delete.failed_detail": "Details: {error}", + "channel_bookmark.delete.failed_title": "Error deleting bookmark", + "channel_bookmark.delete.yes": "Yes", + "channel_bookmark.delete_option": "Delete", + "channel_bookmark.edit.failed_title": "Error editing bookmark", + "channel_bookmark.edit.save_button": "Save", + "channel_bookmark.edit_option": "Edit", + "channel_bookmark.share_option": "Share", + "channel_bookmark_add.link": "Link", + "channel_bookmark_add.link.input.description": "Add a link to any post, file or any external link", + "channel_bookmark_add.link.invalid": "Please enter a valid link", "channel_files.empty.paragraph": "Files posted in this channel will show here.", "channel_files.empty.title": "No files yet", "channel_files.noFiles.paragraph": "This channel doesn't contain any files with the applied filters", @@ -103,6 +125,10 @@ "channel_header.directchannel.you": "{displayName} (you)", "channel_header.info": "View info", "channel_header.member_count": "{count, plural, one {# member} other {# members}}", + "channel_info.add_bookmark": "Add a bookmark", + "channel_info.add_bookmark.file": "Attach a file", + "channel_info.add_bookmark.link": "Add a link", + "channel_info.add_bookmark.max_reached": "This channel has reached the maximum number of bookmarks.", "channel_info.add_members": "Add members", "channel_info.alertNo": "No", "channel_info.alertYes": "Yes", @@ -445,9 +471,9 @@ "mobile.calls_call_ended": "Call ended", "mobile.calls_call_screen": "Call", "mobile.calls_call_thread": "Call Thread", + "mobile.calls_cancel": "Cancel", "mobile.calls_captions": "Captions", "mobile.calls_captions_turned_on": "Live captions turned on", - "mobile.calls_current_call": "Current call", "mobile.calls_disable": "Disable calls", "mobile.calls_dismiss": "Dismiss", "mobile.calls_enable": "Enable calls", @@ -460,21 +486,32 @@ "mobile.calls_ended_at": "Ended at", "mobile.calls_error_message": "Error: {error}", "mobile.calls_error_title": "Error", + "mobile.calls_group_calls_not_available": "Calls are only available in DM channels.", "mobile.calls_headset": "Headset", "mobile.calls_hide_cc": "Hide live captions", "mobile.calls_host": "host", "mobile.calls_host_controls": "Host controls", + "mobile.calls_host_end_confirm": "End call for everyone", + "mobile.calls_host_leave_confirm": "Leave call", + "mobile.calls_host_leave_title": "Are you sure you want to leave this call?", "mobile.calls_host_rec": "You are recording this meeting. You may wish to consider letting everyone know that this meeting is being recorded.", "mobile.calls_host_rec_error": "Please try to begin recording again or contact your system admin for assistance.", "mobile.calls_host_rec_error_title": "An error occurred with the recording", + "mobile.calls_host_rec_stop_body": "The call recording will be processed and posted in the call thread. Are you sure you want to stop the recording?", + "mobile.calls_host_rec_stop_confirm": "Stop recording", + "mobile.calls_host_rec_stop_title": "Stop recording", "mobile.calls_host_rec_stopped": "You can find the recording in this call's chat thread once it's finished processing.", "mobile.calls_host_rec_stopped_title": "Recording has stopped. Processing...", "mobile.calls_host_rec_title": "You are recording", + "mobile.calls_host_rec_trans_stop_body": "The call recording and transcription files will be processed and posted in the call thread. Are you sure you want to stop the recording and transcription?", + "mobile.calls_host_rec_trans_stop_title": "Stop recording and transcription", "mobile.calls_host_transcription": "Consider informing everyone that this meeting is being recorded and transcribed.", "mobile.calls_host_transcription_title": "Recording and transcription has started", "mobile.calls_incoming_dm": "{name} is inviting you to a call", "mobile.calls_incoming_gm": "{name} is inviting you to a call with {num, plural, one {# other} other {# others}}", + "mobile.calls_join": "Join", "mobile.calls_join_call": "Join call", + "mobile.calls_joining": "Joining...", "mobile.calls_lasted": "Lasted {duration}", "mobile.calls_leave": "Leave", "mobile.calls_leave_call": "Leave call", @@ -486,8 +523,9 @@ "mobile.calls_mic_error": "To participate, open Settings to grant Mattermost access to your microphone.", "mobile.calls_more": "More", "mobile.calls_mute": "Mute", + "mobile.calls_mute_others": "Mute others", + "mobile.calls_mute_participant": "Mute participant", "mobile.calls_name_is_talking_postfix": "is talking...", - "mobile.calls_name_started_call": "{name} started a call", "mobile.calls_noone_talking": "No one is talking", "mobile.calls_not_available_msg": "Please contact your System Admin to enable the feature.", "mobile.calls_not_available_option": "(Not available)", @@ -508,12 +546,17 @@ "mobile.calls_raise_hand": "Raise hand", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# more }}raised a hand", "mobile.calls_react": "React", - "mobile.calls_rec": "rec", "mobile.calls_record": "Record", "mobile.calls_recording_start_in_progress": "A recording is already in progress.", "mobile.calls_recording_start_no_permissions": "You don't have permission to start recording. Please ask the call host to start a recording.", "mobile.calls_recording_stop_no_permissions": "You don't have permission to stop the recording. Please ask the call host to stop the recording.", "mobile.calls_recording_stop_none_in_progress": "No recording is in progress.", + "mobile.calls_remove": "Remove", + "mobile.calls_remove_alert_body": "Are you sure you want to remove {displayName} from the call? ", + "mobile.calls_remove_alert_title": "Remove participant", + "mobile.calls_remove_participant": "Remove from call", + "mobile.calls_removed_alert_body": "The host removed you from the call.", + "mobile.calls_removed_alert_title": "You were removed from the call", "mobile.calls_request_message": "Calls are currently running in test mode and only system admins can start them. Contact your system admin for assistance.", "mobile.calls_request_title": "Calls are not currently enabled", "mobile.calls_see_logs": "See server logs", @@ -521,7 +564,10 @@ "mobile.calls_speaker": "Speaker", "mobile.calls_start_call": "Start Call", "mobile.calls_start_call_exists": "A call is already ongoing in the channel.", + "mobile.calls_started_call": "Call started", + "mobile.calls_starting": "Starting...", "mobile.calls_stop_recording": "Stop Recording", + "mobile.calls_stop_screenshare": "Stop screen share", "mobile.calls_tablet": "Tablet", "mobile.calls_thread": "Thread", "mobile.calls_unmute": "Unmute", @@ -529,6 +575,7 @@ "mobile.calls_user_left_channel_error_title": "You left the channel", "mobile.calls_user_removed_from_channel_error_message": "You have been removed from the channel and have been disconnected from the call.", "mobile.calls_user_removed_from_channel_error_title": "You were removed from channel", + "mobile.calls_view_profile": "View profile", "mobile.calls_viewing_screen": "You are viewing {name}'s screen", "mobile.calls_you": "(you)", "mobile.calls_you_2": "You", @@ -610,11 +657,11 @@ "mobile.link.error.title": "Error", "mobile.login_options.cant_heading": "Can't Log In", "mobile.login_options.enter_credentials": "Enter your login details below.", + "mobile.login_options.entraid": "Entra ID", "mobile.login_options.gitlab": "GitLab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "Log in to your account", "mobile.login_options.none": "You can't log in to your account yet. At least one login option must be configured. Contact your System Admin for assistance.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Select a login option below.", @@ -635,9 +682,7 @@ "mobile.manage_members.section_title_members": "MEMBERS", "mobile.managed.blocked_by": "Blocked by {vendor}", "mobile.managed.exit": "Exit", - "mobile.managed.jailbreak": "Jailbroken devices are not trusted by {vendor}.\n\nReason {reason}\n\n\n\nDebug info: {debug}\n\nPlease exit the app.", - "mobile.managed.jailbreak_no_debug_info": "Not available", - "mobile.managed.jailbreak_no_reason": "Not available", + "mobile.managed.jailbreak": "Jailbroken or rooted devices are not trusted by {vendor}.\n\nThe app will now close.", "mobile.managed.not_secured.android": "This device must be secured with a screen lock to use Mattermost.", "mobile.managed.not_secured.ios": "This device must be secured with a passcode to use Mattermost.\n\nGo to Settings > Face ID & Passcode.", "mobile.managed.not_secured.ios.touchId": "This device must be secured with a passcode to use Mattermost.\n\nGo to Settings > Touch ID & Passcode.", @@ -659,8 +704,9 @@ "mobile.oauth.failed_to_login": "Your login attempt failed. Please try again.", "mobile.oauth.failed_to_open_link": "The link failed to open. Please try again.", "mobile.oauth.failed_to_open_link_no_browser": "The link failed to open. Please verify that a browser is installed on the device.", - "mobile.oauth.something_wrong": "An error occurred", "mobile.oauth.something_wrong.okButton": "OK", + "mobile.oauth.success.description": "Signing in now, just a moment...", + "mobile.oauth.success.title": "Authentication successful", "mobile.oauth.switch_to_browser": "You are being redirected to your login provider", "mobile.oauth.switch_to_browser.error_title": "Sign in error", "mobile.oauth.switch_to_browser.title": "Redirecting...", @@ -781,6 +827,16 @@ "notification_settings.auto_responder.footer.message": "Set a custom message that is automatically sent in response to direct messages, such as an out of office or holiday reply. Enabling this setting changes your status to Out of Office and disables notifications.", "notification_settings.auto_responder.message": "Message", "notification_settings.auto_responder.to.enable": "Enable automatic replies", + "notification_settings.call_notification": "Call Notifications", + "notification_settings.calls": "Call Notifications", + "notification_settings.calls.callsInfo": "Note: silent mode must be off to hear the ringtone preview.", + "notification_settings.calls.calm": "Calm", + "notification_settings.calls.cheerful": "Cheerful", + "notification_settings.calls.dynamic": "Dynamic", + "notification_settings.calls.enable_sound": "Notification sound for incoming calls", + "notification_settings.calls.urgent": "Urgent", + "notification_settings.calls_off": "Off", + "notification_settings.calls_on": "On", "notification_settings.email": "Email Notifications", "notification_settings.email.crt.emailInfo": "When enabled, any reply to a thread you're following will send an email notification", "notification_settings.email.crt.send": "Thread reply notifications", @@ -938,6 +994,8 @@ "screen.search.results.filter.title": "Filter by file type", "screen.search.results.filter.videos": "Videos", "screen.search.title": "Search", + "screens.channel_bookmark_add": "Add a bookmark", + "screens.channel_bookmark_edit": "Edit bookmark", "screens.channel_edit": "Edit Channel", "screens.channel_edit_header": "Edit Channel Header", "screens.channel_info": "Channel Info", @@ -951,6 +1009,7 @@ "select_team.title": "Select a team", "server.invalid.certificate.description": "The certificate for this server is invalid.\nYou might be connecting to a server that is pretending to be \"{hostname}\" which could put your confidential information at risk.", "server.invalid.certificate.title": "Invalid SSL certificate", + "server.invalid.pinning.title": "Invalid pinned SSL certificate", "server.logout.alert_description": "All associated data will be removed", "server.logout.alert_title": "Are you sure you want to log out of {displayName}?", "server.remove.alert_description": "This will remove it from your list of servers. All associated data will be removed.", @@ -983,7 +1042,7 @@ "settings.about.server.version": "Server Version: {version} (Build {buildNumber}", "settings.about.server.version.noBuild": "Server Version: {version}", "settings.about.server.version.title": "Server Version:", - "settings.about.server.version.value": "{version} (Build {number})", + "settings.about.server.version.value": "{version} (Build {buildNumber})", "settings.advanced.cancel": "Cancel", "settings.advanced.delete": "Delete", "settings.advanced.delete_data": "Delete local files", @@ -1055,7 +1114,9 @@ "suggestion.mention.groups": "Group Mentions", "suggestion.mention.here": "Notifies everyone online in this channel", "suggestion.mention.morechannels": "Other Channels", + "suggestion.mention.nonmembers": "Not in Channel", "suggestion.mention.special": "Special Mentions", + "suggestion.mention.users": "Users", "suggestion.search.direct": "Direct Messages", "suggestion.search.private": "Private Channels", "suggestion.search.public": "Public Channels", diff --git a/assets/base/i18n/es.json b/assets/base/i18n/es.json index 7ed3cd69ff0..dbc563a2097 100644 --- a/assets/base/i18n/es.json +++ b/assets/base/i18n/es.json @@ -447,7 +447,6 @@ "mobile.calls_call_thread": "Hilo de llamada", "mobile.calls_captions": "Subtítulos", "mobile.calls_captions_turned_on": "Subtítulos en vivo activados", - "mobile.calls_current_call": "Llamada actual", "mobile.calls_disable": "Deshabilitar llamadas", "mobile.calls_dismiss": "Desestimar", "mobile.calls_enable": "Habilitar llamadas", @@ -484,7 +483,6 @@ "mobile.calls_more": "Más", "mobile.calls_mute": "Silenciar", "mobile.calls_name_is_talking_postfix": "está hablando...", - "mobile.calls_name_started_call": "{name} inició una llamada", "mobile.calls_noone_talking": "Nadie está hablando", "mobile.calls_not_available_msg": "Por favor contacta a tu Administrador del Sistema para habilitar esta característica.", "mobile.calls_not_available_option": "(No disponible)", @@ -503,7 +501,6 @@ "mobile.calls_raise_hand": "Levantar mano", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# more }}alzó una mano", "mobile.calls_react": "Reaccionar", - "mobile.calls_rec": "rec", "mobile.calls_record": "Grabar", "mobile.calls_recording_start_in_progress": "Una grabación ya está en progreso.", "mobile.calls_recording_start_no_permissions": "No tienes permisos para iniciar una grabación. Por favor solicita al anfitrión de la llamada el iniciar una grabación.", @@ -609,7 +606,6 @@ "mobile.login_options.google": "Google", "mobile.login_options.heading": "Inicia sesión en tu Cuenta", "mobile.login_options.none": "Aún no puedes iniciar sesión en tu cuenta. Se debe configurar al menos una opción de inicio. Contacta a tu Administrador del Sistema para ayuda.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Selecciona a continuación una opción de inicio de sesión.", @@ -631,8 +627,6 @@ "mobile.managed.blocked_by": "Bloqueado por {vendor}", "mobile.managed.exit": "Salir", "mobile.managed.jailbreak": "Los dispositivos con jailbrak no son de confianza para {vendor}\n\nMotivo {reason}\n\n\n\nInformación de depuración: {debug}\n\nPor favor salga de la applicación.", - "mobile.managed.jailbreak_no_debug_info": "No disponible", - "mobile.managed.jailbreak_no_reason": "No disponible", "mobile.managed.not_secured.android": "Este dispositivo debe estar asegurado con un bloqueo de pantalla para utilizar Mattermost.", "mobile.managed.not_secured.ios": "Este dispositivo debe estar protegido con un código de acceso para utilizar Mattermost.\n\nVaya a Configuración > Identificación Facial y clave de acceso.", "mobile.managed.not_secured.ios.touchId": "Este dispositivo debe estar protegido con un código de acceso para utilizar Mattermost.\n\nVaya a Configuración > Identificación Táctil y clave de acceso.", @@ -652,9 +646,6 @@ "mobile.no_results_with_term.files": "No hay archivos que coincidan con “{term}”", "mobile.no_results_with_term.messages": "No se encontraron coincidencias para “{term}”", "mobile.oauth.failed_to_login": "Su intento de acceso falló. Por favor, inténtelo de nuevo.", - "mobile.oauth.failed_to_open_link": "El enlace no se abrió. Por favor, inténtelo de nuevo.", - "mobile.oauth.failed_to_open_link_no_browser": "El enlace falló al abrir. Por favor verifica que hay un navegador instalado en el dispositivo.", - "mobile.oauth.something_wrong": "Algo salió mal", "mobile.oauth.something_wrong.okButton": "OK", "mobile.oauth.switch_to_browser": "Estás siendo redireccionado a tu proveedor de inicio de sesión", "mobile.oauth.switch_to_browser.error_title": "Error de inicio de sesión", diff --git a/assets/base/i18n/fa.json b/assets/base/i18n/fa.json index 41332d5ea50..adf271883d6 100644 --- a/assets/base/i18n/fa.json +++ b/assets/base/i18n/fa.json @@ -397,7 +397,6 @@ "mobile.calls_call_ended": "تماس پایان یافت", "mobile.calls_call_screen": "تماس", "mobile.calls_call_thread": "بخش تماس", - "mobile.calls_current_call": "تماس جاری", "mobile.calls_disable": "غیرفعال‌کردن تماس‌ها", "mobile.calls_dismiss": "رد کردن", "mobile.calls_enable": "فعال‌کردن تماس‌ها", @@ -428,7 +427,6 @@ "mobile.calls_mic_error": "", "mobile.calls_more": "بیشتر", "mobile.calls_mute": "بی‌صدا", - "mobile.calls_name_started_call": "{name} یک تماس شروع کرد", "mobile.calls_noone_talking": "هیچ کسی صحبت نمی‌کند", "mobile.calls_not_available_msg": "", "mobile.calls_not_available_option": "(نا موجود)", @@ -442,7 +440,6 @@ "mobile.calls_participant_rec_title": "در حال ضبط", "mobile.calls_raise_hand": "بالابردن دست", "mobile.calls_react": "واکنش", - "mobile.calls_rec": "ضبط", "mobile.calls_record": "ضبط", "mobile.calls_recording_start_in_progress": "پیش از این یک ضبط در جریان بوده.", "mobile.calls_recording_start_no_permissions": "", @@ -526,7 +523,6 @@ "mobile.login_options.google": "Google", "mobile.login_options.heading": "به حساب خود وارد شوید", "mobile.login_options.none": "", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "یکی از گزینه‌های ورود را انتخاب کنید.", @@ -548,8 +544,6 @@ "mobile.managed.blocked_by": "مسدود شده توسط {vendor}", "mobile.managed.exit": "خروج", "mobile.managed.jailbreak": "دستگاه‌های جیلبریک مورد اعتماد {vendor} نیستند،\n\nدلیل {reason}\n\n\n\nاطلاعات پیگیری: {debug}\n\nلطفاً از برنامه خارج شوید.", - "mobile.managed.jailbreak_no_debug_info": "موجود نیست", - "mobile.managed.jailbreak_no_reason": "موجود نیست", "mobile.managed.not_secured.android": "برای استفاده از Mattermost، این دستگاه باید با قفل صفحه ایمن شود.", "mobile.managed.not_secured.ios": "برای استفاده از Mattermost، این دستگاه باید با یک رمز عبور ایمن شود.\n\nبه Settings > Face ID & Passcode بروید.", "mobile.managed.not_secured.ios.touchId": "برای استفاده از Mattermost، این دستگاه باید با یک رمز عبور ایمن شود.\n\nبه Settings > Touch ID & Passcode بروید.", @@ -568,9 +562,6 @@ "mobile.no_results_with_term.files": "هیچ پرونده‌ای برای «{term}» یافت نشد", "mobile.no_results_with_term.messages": "هیچ نتیجه‌ای برای «{term}» یافت نشد", "mobile.oauth.failed_to_login": "تلاش برای ورود ناموفق بود. لطفا مجددا تلاش کنید.", - "mobile.oauth.failed_to_open_link": "بازکردن پیوند ناموفق بود. لطفا مجددا تلاش کنید.", - "mobile.oauth.failed_to_open_link_no_browser": "", - "mobile.oauth.something_wrong": "چیزی اشتباه پیش رفت", "mobile.oauth.something_wrong.okButton": "تایید", "mobile.oauth.switch_to_browser": "شما به ارائه دهنده ورود خود هدایت می‌شوید", "mobile.oauth.switch_to_browser.error_title": "ورود ناموفق", diff --git a/assets/base/i18n/fi.json b/assets/base/i18n/fi.json index 664a3cc47cb..1d26fb3d555 100644 --- a/assets/base/i18n/fi.json +++ b/assets/base/i18n/fi.json @@ -86,7 +86,6 @@ "mobile.announcement_banner.title": "Ilmoitus", "mobile.calls_end_msg_channel": "Haluatko varmasti päättää {numParticipants} osallistujan välisen puhelun kanavalla {displayName}?", "mobile.calls_end_msg_dm": "Haluatko varmasti päättää puhelun käyttäjän {displayName} kanssa?", - "mobile.calls_name_started_call": "{name} aloitti puhelun", "mobile.calls_participant_rec": "Isäntä käynnisti kokouksen tallennuksen. Pysymällä kokouksessa hyväksyt viestintäsi tallennuksen omalta osaltasi.", "mobile.calls_participant_transcription": "Isäntä käynnisti kokouksen tallennuksen ja tekstimuunnoksen. Pysymällä kokouksessa hyväksyt tallennuksen ja tekstimuunnoksen omalta osaltasi.", "mobile.channel_list.unreads": "LUKEMATTOMAT", diff --git a/assets/base/i18n/fr.json b/assets/base/i18n/fr.json index 6a990af1987..2ad89bc1b86 100644 --- a/assets/base/i18n/fr.json +++ b/assets/base/i18n/fr.json @@ -2,7 +2,7 @@ "about.date": "Date de compilation :", "about.enterpriseEditionLearn": "Pour en savoir plus sur l’Enterprise Edition : ", "about.enterpriseEditionSt": "Communication moderne derrière votre pare-feu.", - "about.enterpriseEditione1": "Édition Entreprise", + "about.enterpriseEditione1": "Version Entreprise", "about.hash": "Hash de version :", "about.hashee": "Hash de version EE :", "about.teamEditionLearn": "Rejoignez la communauté Mattermost sur", @@ -432,7 +432,6 @@ "mobile.calls_call_ended": "Appel terminé", "mobile.calls_call_screen": "Appel", "mobile.calls_call_thread": "Fil de discussion d'appel", - "mobile.calls_current_call": "Appel en cours", "mobile.calls_disable": "Désactiver les appels", "mobile.calls_dismiss": "Masquer", "mobile.calls_enable": "Activer les appels", @@ -467,7 +466,6 @@ "mobile.calls_more": "Plus", "mobile.calls_mute": "En sourdine", "mobile.calls_name_is_talking_postfix": "parle...", - "mobile.calls_name_started_call": "{name} a démarré un appel", "mobile.calls_noone_talking": "Personne ne parle", "mobile.calls_not_available_msg": "Veuillez contacter votre administrateur système pour activer la fonctionnalité.", "mobile.calls_not_available_option": "(Non disponible)", @@ -484,7 +482,6 @@ "mobile.calls_raise_hand": "Lever la main", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# more }}a levé la main", "mobile.calls_react": "Réagir", - "mobile.calls_rec": "rec", "mobile.calls_record": "Enregistrer", "mobile.calls_recording_start_in_progress": "Un enregistrement est déjà en cours.", "mobile.calls_recording_start_no_permissions": "Vous n'avez pas la permission d'enregistrer la conversation. Contactez l'hôte pour commencer à enregistrer.", @@ -584,7 +581,6 @@ "mobile.login_options.google": "Google", "mobile.login_options.heading": "Connectez-vous à votre compte", "mobile.login_options.none": "Vous ne pouvez pas encore vous connecter à votre compte. Au moins une option de connexion doit être configurée. Contactez votre administrateur système pour obtenir de l'aide.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Sélectionnez une option de connexion ci-dessous.", @@ -606,8 +602,6 @@ "mobile.managed.blocked_by": "Bloqué par {vendor}", "mobile.managed.exit": "Quitter", "mobile.managed.jailbreak": "Les dispositifs jailbreakés ne sont pas approuvés par {vendor}, veuillez quitter l'application.\n\nRaison {reason}\n\n\n\nInfo de débogage : {debug}\n\nMerci de quitter l'application.", - "mobile.managed.jailbreak_no_debug_info": "", - "mobile.managed.jailbreak_no_reason": "", "mobile.managed.not_secured.android": "Cet appareil doit être sécurisé avec un verrouillage d'écran pour pouvoir utiliser Mattermost.", "mobile.managed.not_secured.ios": "Cet appareil doit être sécurisé avec un code pour pouvoir utiliser Mattermost.\n\nAllez dans Réglages > Face ID et code.", "mobile.managed.not_secured.ios.touchId": "Cet appareil doit être sécurisé avec un code pour pouvoir utiliser Mattermost.\n\nAllez dans Réglages > Touch ID et code.", @@ -626,9 +620,6 @@ "mobile.no_results_with_term.files": "Aucun fichier correspondant à \"{term}\"", "mobile.no_results_with_term.messages": "Aucun résultat trouvé pour \"{term}\"", "mobile.oauth.failed_to_login": "Votre tentative de connexion a échoué. Veuillez réessayer.", - "mobile.oauth.failed_to_open_link": "Impossible d'ouvrir le lien. Veuillez réessayer.", - "mobile.oauth.failed_to_open_link_no_browser": "Le lien ne s'est pas ouvert. Veuillez vérifier qu'un navigateur est installé sur votre appareil.", - "mobile.oauth.something_wrong": "Une erreur s'est produite", "mobile.oauth.something_wrong.okButton": "OK", "mobile.oauth.switch_to_browser": "Vous allez être redirigé vers votre fournisseur de connexion", "mobile.oauth.switch_to_browser.error_title": "Erreur de connexion", diff --git a/assets/base/i18n/fy.json b/assets/base/i18n/fy.json index a34e66e0d11..662fed00ca3 100644 --- a/assets/base/i18n/fy.json +++ b/assets/base/i18n/fy.json @@ -265,9 +265,6 @@ "mobile.message_length.message_split_left": "Bericht overschrijdt het maximum aantal karakters", "mobile.message_length.title": "Berichtlengte", "mobile.oauth.failed_to_login": "Jouw aanmeldingspoging is mislukt. Probeer het opnieuw.", - "mobile.oauth.failed_to_open_link": "De link is niet geopend. Probeer het opnieuw.", - "mobile.oauth.failed_to_open_link_no_browser": "De link kon niet worden geopend. Controleer of een browser is geïnstalleerd in de huidige ruimte.", - "mobile.oauth.something_wrong": "Er ging iets mis", "mobile.oauth.switch_to_browser": "Gebruik je browser om het inlogproces te voltooien.", "mobile.oauth.try_again": "Probeer opnieuw", "mobile.open_dm.error": "We konden geen direct bericht openen met {displayName} . Controleer jouw verbinding en probeer het opnieuw.", diff --git a/assets/base/i18n/he.json b/assets/base/i18n/he.json index 870e4c5d94c..04c0a952e4d 100644 --- a/assets/base/i18n/he.json +++ b/assets/base/i18n/he.json @@ -1,9 +1,10 @@ { - "about.date": "תאריך בילד:", + "about.date": "תאריך בנייה:", "about.enterpriseEditionLearn": "למד עוד אודות הגרסה הארגונית ב ", "about.enterpriseEditionSt": "תקשורת מודרנית מאחורי חומת האש שלך.", "about.enterpriseEditione1": "רשיון מסחרי", - "about.hash": "ה Hash של הבילד:", + "about.hash": "Build Hash:", + "about.hashee": "EE Build Hash:", "about.teamEditionLearn": "הצטרף לקהילת Mattermost ב ", "about.teamEditionSt": "כל תקשורת הצוות שלך במקום אחד, ניתנת לחיפוש מיידי ונגישה בכל מקום.", "about.teamEditiont0": "רשיון קבוצתי", diff --git a/assets/base/i18n/hr.json b/assets/base/i18n/hr.json index 4149d2c7aa0..b2a32b38299 100644 --- a/assets/base/i18n/hr.json +++ b/assets/base/i18n/hr.json @@ -257,7 +257,6 @@ "mobile.login_options.gitlab": "GitLab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "Prijavi se na svoj račun", - "mobile.login_options.office365": "Office 365", "mobile.login_options.saml": "SAML", "mobile.login_options.separator_text": "ili se prijavi s", "mobile.manage_members.admin": "Administrator", @@ -282,8 +281,6 @@ "mobile.no_results_with_term.files": "Nema datoteka za „{term}”", "mobile.no_results_with_term.messages": "Ništa nije pronađeno za „{term}”", "mobile.oauth.failed_to_login": "Pokušaj prijave neuspio. Pokušaj ponovo.", - "mobile.oauth.failed_to_open_link": "Neuspjelo otvaranje poveznice. Pokušaj ponovo.", - "mobile.oauth.something_wrong": "Dogodila se greška", "mobile.oauth.something_wrong.okButton": "U redu", "mobile.oauth.switch_to_browser": "Preusmjeravamo te na tvog pružatelja usluge prijave", "mobile.oauth.switch_to_browser.title": "Preusmjeravanje …", @@ -426,7 +423,7 @@ "settings.about.server.version": "Verzija servera: {version} (izgradnja {buildNumber}", "settings.about.server.version.noBuild": "Verzija servera: {version}", "settings.about.server.version.title": "Verzija servera:", - "settings.about.server.version.value": "{version} (izgradnja {number})", + "settings.about.server.version.value": "{version} (izgradnja {buildNumber})", "settings.advanced.cancel": "Odustani", "settings.advanced.delete": "Izbriši", "settings.advanced.delete_data": "Izbriši lokalne datoteke", diff --git a/assets/base/i18n/hu.json b/assets/base/i18n/hu.json index 80a37b4c9b6..794eeda7791 100644 --- a/assets/base/i18n/hu.json +++ b/assets/base/i18n/hu.json @@ -432,7 +432,6 @@ "mobile.calls_call_ended": "", "mobile.calls_call_screen": "", "mobile.calls_call_thread": "", - "mobile.calls_current_call": "", "mobile.calls_disable": "", "mobile.calls_dismiss": "", "mobile.calls_enable": "", @@ -463,7 +462,6 @@ "mobile.calls_mic_error": "", "mobile.calls_more": "", "mobile.calls_mute": "", - "mobile.calls_name_started_call": "", "mobile.calls_noone_talking": "", "mobile.calls_not_available_msg": "", "mobile.calls_not_available_option": "", @@ -477,7 +475,6 @@ "mobile.calls_participant_rec_title": "", "mobile.calls_raise_hand": "", "mobile.calls_react": "", - "mobile.calls_rec": "", "mobile.calls_record": "", "mobile.calls_recording_start_in_progress": "", "mobile.calls_recording_start_no_permissions": "", @@ -561,7 +558,6 @@ "mobile.login_options.google": "", "mobile.login_options.heading": "", "mobile.login_options.none": "", - "mobile.login_options.office365": "", "mobile.login_options.openid": "", "mobile.login_options.saml": "", "mobile.login_options.select_option": "", @@ -583,8 +579,6 @@ "mobile.managed.blocked_by": "{vendor} letiltotta", "mobile.managed.exit": "Kilépés", "mobile.managed.jailbreak": "A {vendor} nem bízik a Rootolt eszközökben.\n\nIndoklás {reason}\n\n\n\nHibakeresés: {debug}\n\nKérjük, lépjen ki az alkalmazásból.", - "mobile.managed.jailbreak_no_debug_info": "", - "mobile.managed.jailbreak_no_reason": "", "mobile.managed.not_secured.android": "A Mattermost használatához a készüléket képernyőzárral kell beállítani.", "mobile.managed.not_secured.ios": "A Mattermost használatához ezt az eszközt zárolási mintával kell védeni.\n\nLépjen a Beállítások > Face ID és jelkód menüpontba.", "mobile.managed.not_secured.ios.touchId": "A Mattermost használatához ezt az eszközt zárolási mintával kell védeni.\n\nLépjen a Beállítások > Face ID és jelkód menüpontba.", @@ -603,9 +597,6 @@ "mobile.no_results_with_term.files": "", "mobile.no_results_with_term.messages": "", "mobile.oauth.failed_to_login": "A bejelentkezési kísérlet nem sikerült. Kérlek próbáld újra.", - "mobile.oauth.failed_to_open_link": "A linket nem sikerült megnyitni. Kérlek próbáld újra.", - "mobile.oauth.failed_to_open_link_no_browser": "", - "mobile.oauth.something_wrong": "Valami elromlott", "mobile.oauth.something_wrong.okButton": "", "mobile.oauth.switch_to_browser": "", "mobile.oauth.switch_to_browser.error_title": "", diff --git a/assets/base/i18n/it.json b/assets/base/i18n/it.json index 863d149db22..f5348d23b26 100644 --- a/assets/base/i18n/it.json +++ b/assets/base/i18n/it.json @@ -96,6 +96,20 @@ "camera_type.video.option": "Registrazione video", "center_panel.archived.closeChannel": "Chiudi Canale", "channel_add_members.add_members.button": "Aggiungi membri", + "channel_bookmark.add.detail_title": "Titolo", + "channel_bookmark.add.emoji": "Aggiungi emoji", + "channel_bookmark.add.file_cancel": "Annulla", + "channel_bookmark.add.file_title": "Allegato", + "channel_bookmark.add.file_upload_error": "Errore durante il caricamento. Riprova più tardi.", + "channel_bookmark.add_edit.failed_desc": "Dettagli:{error}", + "channel_bookmark.copy_option": "Copia il Collegamento", + "channel_bookmark.delete.failed_detail": "Dettagli: {error}", + "channel_bookmark.delete.yes": "Si", + "channel_bookmark.delete_option": "Cancella", + "channel_bookmark.edit.save_button": "Salva", + "channel_bookmark.edit_option": "Modifica", + "channel_bookmark.share_option": "Condividi", + "channel_bookmark_add.link": "Collegamento", "channel_files.empty.paragraph": "I file inviati in questo canale saranno mostrati qui.", "channel_files.empty.title": "Ancora nessun file", "channel_files.noFiles.paragraph": "Questo canale non contiene alcun file con i filtri applicati", @@ -103,6 +117,8 @@ "channel_header.directchannel.you": "{displayName} (tu)", "channel_header.info": "Visualizza info", "channel_header.member_count": "{count, plural, one {# membro} other {# membri}}", + "channel_info.add_bookmark.file": "Allega un file", + "channel_info.add_bookmark.link": "Aggiungi un collegamento", "channel_info.add_members": "Aggiungi membri", "channel_info.alertNo": "No", "channel_info.alertYes": "Sì", @@ -119,6 +135,10 @@ "channel_info.close_gm": "Chiudere il messaggio di gruppo", "channel_info.close_gm_channel": "Siete sicuri di voler chiudere questo messaggio di gruppo? In questo modo lo si rimuove dalla schermata iniziale, ma è sempre possibile riaprirlo.", "channel_info.convert_failed": "Non siamo riusciti a convertire {displayName} in un canale privato.", + "channel_info.convert_gm_to_channel": "Converti in un Canale Privato", + "channel_info.convert_gm_to_channel.button_text": "Converti in Canale Privato", + "channel_info.convert_gm_to_channel.button_text_converting": "Conversione...", + "channel_info.convert_gm_to_channel.screen_title": "Converti in Canale Privato", "channel_info.convert_private": "Convertire in canale privato", "channel_info.convert_private_description": "Quando si converte {displayName} in un canale privato, la cronologia e l'iscrizione vengono conservate. I file condivisi pubblicamente rimangono accessibili a chiunque abbia il link. L'iscrizione a un canale privato è solo su invito.\n\nLa modifica è permanente e non può essere annullata.\n\nSei sicuro di voler convertire {displayName} in un canale privato?", "channel_info.convert_private_success": "{displayName} è ora un canale privato.", @@ -319,6 +339,7 @@ "general_settings.help": "Aiuto", "general_settings.notifications": "Notifiche", "general_settings.report_problem": "Segnala un problema", + "generic.back": "Indietro", "get_post_link_modal.title": "Copia collegamento", "global_threads.allThreads": "Tutti i tuoi thread", "global_threads.emptyThreads.message": "Tutte le discussioni in cui si è menzionati o a cui si è partecipato verranno visualizzate qui, insieme a tutte le discussioni che si sono seguite.", @@ -355,6 +376,7 @@ "invite.send_error": "Si è verificato un errore durante il tentativo di invio degli inviti. Controllare la connessione di rete e riprovare.", "invite.send_invite": "Inviare", "invite.shareLink": "Condividi il link", + "invite.summary.back": "Torna indietro", "invite.summary.done": "Fatto", "invite.summary.email_invite": "È stata inviata un'e-mail di invito", "invite.summary.error": "{invitationsCount, plural, one {Invitation} other {Invitations}} non è stato possibile inviarlo con successo.", @@ -413,10 +435,12 @@ "mobile.android.photos_permission_denied_description": "Caricare le foto sul server o salvarle sul dispositivo. Aprire le Impostazioni per concedere a {applicationName} l'accesso in lettura e scrittura alla libreria fotografica.", "mobile.android.photos_permission_denied_title": "{applicationName} vorrebbe accedere alle tue foto", "mobile.announcement_banner.title": "Annuncio", + "mobile.calls_audio_device": "Seleziona dispositivo audio", + "mobile.calls_bluetooth": "Bluetooth", "mobile.calls_call_ended": "Chiamata terminata", "mobile.calls_call_screen": "Chiamata", "mobile.calls_call_thread": "Thread chiamata", - "mobile.calls_current_call": "Chiamata corrente", + "mobile.calls_cancel": "Annulla", "mobile.calls_disable": "Disattivare le chiamate", "mobile.calls_dismiss": "Congedo", "mobile.calls_enable": "Abilitazione delle chiamate", @@ -430,6 +454,8 @@ "mobile.calls_error_message": "Errore: {error}", "mobile.calls_error_title": "Errore", "mobile.calls_host": "ospite", + "mobile.calls_host_end_confirm": "Termina la chiamata per tutti", + "mobile.calls_host_leave_confirm": "Lascia la chiamata", "mobile.calls_host_rec": "Stai registrando la riunione. Informa tutti i partecipanti che questa riunione viene registrata.", "mobile.calls_host_rec_error": "Provare a registrare di nuovo. È inoltre possibile contattare l'amministratore del sistema per ottenere assistenza nella risoluzione dei problemi.", "mobile.calls_host_rec_error_title": "Si è verificato un problema nella registrazione", @@ -447,7 +473,6 @@ "mobile.calls_mic_error": "Per partecipare, aprire le Impostazioni per consentire a Mattermost di accedere al microfono.", "mobile.calls_more": "Di più", "mobile.calls_mute": "Muto", - "mobile.calls_name_started_call": "{name} ha avviato una chiamata", "mobile.calls_noone_talking": "Nessuno parla", "mobile.calls_not_available_msg": "Contattare il proprio amministratore di sistema per abilitare la funzione.", "mobile.calls_not_available_option": "(Non disponibile)", @@ -461,7 +486,6 @@ "mobile.calls_participant_rec_title": "La registrazione è in corso", "mobile.calls_raise_hand": "Alzare la mano", "mobile.calls_react": "Reagisci", - "mobile.calls_rec": "rec", "mobile.calls_record": "Registra", "mobile.calls_recording_start_in_progress": "È già in corso una registrazione.", "mobile.calls_recording_start_no_permissions": "Non si dispone dei permessi per avviare una registrazione. Chiedere all'host della chiamata di avviare una registrazione.", @@ -545,7 +569,6 @@ "mobile.login_options.google": "Google", "mobile.login_options.heading": "Accedere al proprio account", "mobile.login_options.none": "Non è ancora possibile accedere al proprio account. È necessario configurare almeno un'opzione di accesso. Contattare il proprio amministratore di sistema per assistenza.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Seleziona un'opzione di accesso qui sotto.", @@ -567,8 +590,6 @@ "mobile.managed.blocked_by": "Bloccati da {vendor}", "mobile.managed.exit": "Esci", "mobile.managed.jailbreak": "I dispositivi jailbroken non sono considerati affidabili da {vendor}.\n\nMotivo {reason}\n\n\n\nInformazioni di debug: {debug}\n\nSi prega di uscire dall'applicazione.", - "mobile.managed.jailbreak_no_debug_info": "Non disponibile", - "mobile.managed.jailbreak_no_reason": "Non disponibile", "mobile.managed.not_secured.android": "Questo dispositivo deve essere protetto da un blocco schermo per utilizzare Mattermost.", "mobile.managed.not_secured.ios": "Questo dispositivo deve essere protetto da un codice per utilizzare Mattermost.\n\nAprire Impostazioni > Face ID & codice.", "mobile.managed.not_secured.ios.touchId": "Questo dispositivo deve essere protetto da un codice per utilizzare Mattermost.\n\nAprire Impostazioni > Touch ID & codice.", @@ -587,9 +608,6 @@ "mobile.no_results_with_term.files": "Nessun file corrispondente a \"{term}\"", "mobile.no_results_with_term.messages": "Nessuna corrispondenza trovata per \"{term}\"", "mobile.oauth.failed_to_login": "Tentativo di accesso non riuscito. Riprovare.", - "mobile.oauth.failed_to_open_link": "Il link non è stato aperto. Riprovare.", - "mobile.oauth.failed_to_open_link_no_browser": "Il link non si è aperto. Verificare che sul dispositivo sia installato un browser.", - "mobile.oauth.something_wrong": "Si è verificato un errore", "mobile.oauth.something_wrong.okButton": "OK", "mobile.oauth.switch_to_browser": "Si viene reindirizzati al proprio provider di login", "mobile.oauth.switch_to_browser.error_title": "Errore di accesso", diff --git a/assets/base/i18n/ja.json b/assets/base/i18n/ja.json index e71b77b8132..8826acd7dbf 100644 --- a/assets/base/i18n/ja.json +++ b/assets/base/i18n/ja.json @@ -96,6 +96,28 @@ "camera_type.video.option": "動画を撮影する", "center_panel.archived.closeChannel": "チャンネルを閉じる", "channel_add_members.add_members.button": "メンバーを追加する", + "channel_bookmark.add.detail_title": "タイトル", + "channel_bookmark.add.emoji": "絵文字を追加", + "channel_bookmark.add.failed_title": "ブックマーク追加時にエラーが発生しました", + "channel_bookmark.add.file_cancel": "キャンセル", + "channel_bookmark.add.file_title": "添付", + "channel_bookmark.add.file_upload_error": "ファイルアップロード時にエラーが発生しました。再度試してください。", + "channel_bookmark.add.file_uploading": "アップロード中... ({progress}%)", + "channel_bookmark.add_edit.failed_desc": "詳細: {error}", + "channel_bookmark.copy_option": "リンクをコピー", + "channel_bookmark.delete.confirm": "本当にブックマーク {displayName} を削除しますか?", + "channel_bookmark.delete.confirm_title": "ブックマークを削除", + "channel_bookmark.delete.failed_detail": "詳細: {error}", + "channel_bookmark.delete.failed_title": "ブックマーク削除時にエラーが発生しました", + "channel_bookmark.delete.yes": "はい", + "channel_bookmark.delete_option": "削除", + "channel_bookmark.edit.failed_title": "ブックマーク編集時にエラーが発生しました", + "channel_bookmark.edit.save_button": "保存", + "channel_bookmark.edit_option": "編集", + "channel_bookmark.share_option": "共有", + "channel_bookmark_add.link": "リンク", + "channel_bookmark_add.link.input.description": "投稿、ファイル、外部サイトへのリンクを追加してください", + "channel_bookmark_add.link.invalid": "有効なリンクを入力してください", "channel_files.empty.paragraph": "このチャンネルに投稿されたファイルがここに表示されます。", "channel_files.empty.title": "まだファイルはありません", "channel_files.noFiles.paragraph": "このチャンネルには、適用されたフィルタに合致するファイルがありません", @@ -103,6 +125,10 @@ "channel_header.directchannel.you": "{displayName} (あなた)", "channel_header.info": "情報を表示する", "channel_header.member_count": "{count, plural, one {# メンバー} other {# メンバー}}", + "channel_info.add_bookmark": "ブックマークを追加", + "channel_info.add_bookmark.file": "ファイルを添付", + "channel_info.add_bookmark.link": "リンクを追加", + "channel_info.add_bookmark.max_reached": "このチャンネルのブックマーク数が上限に達しました。", "channel_info.add_members": "メンバーを追加する", "channel_info.alertNo": "いいえ", "channel_info.alertYes": "はい", @@ -445,9 +471,9 @@ "mobile.calls_call_ended": "通話が終了しました", "mobile.calls_call_screen": "通話", "mobile.calls_call_thread": "Callスレッド", + "mobile.calls_cancel": "キャンセル", "mobile.calls_captions": "字幕", "mobile.calls_captions_turned_on": "ライブキャプションをオンにする", - "mobile.calls_current_call": "現在の通話", "mobile.calls_disable": "通話を無効にする", "mobile.calls_dismiss": "破棄", "mobile.calls_enable": "通話を有効にする", @@ -460,21 +486,32 @@ "mobile.calls_ended_at": "終了時刻", "mobile.calls_error_message": "エラー: {error}", "mobile.calls_error_title": "エラー", + "mobile.calls_group_calls_not_available": "通話はDMチャンネルでのみ利用できます。", "mobile.calls_headset": "ヘッドセット", "mobile.calls_hide_cc": "ライブキャプションを非表示にする", "mobile.calls_host": "ホスト", "mobile.calls_host_controls": "ホスト操作", + "mobile.calls_host_end_confirm": "全員に対し通話を終了する", + "mobile.calls_host_leave_confirm": "通話を脱退する", + "mobile.calls_host_leave_title": "本当に通話から脱退しますか?", "mobile.calls_host_rec": "あなたはこの会議をレコーディングしています。この会議が記録されていることを全員に知らせることを検討してください。", "mobile.calls_host_rec_error": "もう一度レコーディングを試してみてください。もしくは、この問題についてシステム管理者に問い合わせてください。", "mobile.calls_host_rec_error_title": "レコーディングに問題が発生しました", + "mobile.calls_host_rec_stop_body": "通話のレコーディングは、処理された後に通話スレッドに投稿されます。本当にレコーディングを停止しますか?", + "mobile.calls_host_rec_stop_confirm": "レコーディングを停止する", + "mobile.calls_host_rec_stop_title": "レコーディングを停止する", "mobile.calls_host_rec_stopped": "レコーディングは、処理が完了した後、この通話のチャットスレッドから確認できるようになります。", "mobile.calls_host_rec_stopped_title": "レコーディングが停止しました。処理しています...", "mobile.calls_host_rec_title": "レコーディングしています", + "mobile.calls_host_rec_trans_stop_body": "通話のレコーディング文字起こしのファイルは、処理された後に通話スレッドに投稿されます。本当にレコーディングと文字起こしを停止しますか?", + "mobile.calls_host_rec_trans_stop_title": "レコーディングと文字起こしを停止", "mobile.calls_host_transcription": "この会議のレコーディングと書き起こしが実施されていることを全員に知らせることを検討してください。", "mobile.calls_host_transcription_title": "レコーディングと文字起こしが開始されました", "mobile.calls_incoming_dm": "{name}があなたを通話に招待しています", "mobile.calls_incoming_gm": "{name}があなたを{num, plural, one {# 人} other {# 人}}との通話に招待しています", + "mobile.calls_join": "参加する", "mobile.calls_join_call": "通話に参加する", + "mobile.calls_joining": "参加中...", "mobile.calls_lasted": "通話時間 {duration}", "mobile.calls_leave": "脱退", "mobile.calls_leave_call": "通話を脱退する", @@ -489,7 +526,6 @@ "mobile.calls_mute_others": "他の人をミュートする", "mobile.calls_mute_participant": "参加者をミュートする", "mobile.calls_name_is_talking_postfix": "が話しています...", - "mobile.calls_name_started_call": "{name}が通話を開始しました", "mobile.calls_noone_talking": "誰も話していません", "mobile.calls_not_available_msg": "この機能を有効にするにはシステム管理者に問い合わせてください。", "mobile.calls_not_available_option": "(利用できません)", @@ -510,7 +546,6 @@ "mobile.calls_raise_hand": "手を挙げる", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# 名}} が挙手しています", "mobile.calls_react": "リアクション", - "mobile.calls_rec": "レコーディング", "mobile.calls_record": "レコーディング", "mobile.calls_recording_start_in_progress": "既にレコーディング中です。", "mobile.calls_recording_start_no_permissions": "レコーディングを開始する権限がありません。通話のホストにレコーディングを開始するよう依頼してください。", @@ -529,6 +564,8 @@ "mobile.calls_speaker": "スピーカー", "mobile.calls_start_call": "通話を開始する", "mobile.calls_start_call_exists": "チャンネル内で既にCallが実施されています。", + "mobile.calls_started_call": "通話開始", + "mobile.calls_starting": "開始中...", "mobile.calls_stop_recording": "レコーディング停止", "mobile.calls_stop_screenshare": "画面共有を停止", "mobile.calls_tablet": "タブレット", @@ -620,11 +657,11 @@ "mobile.link.error.title": "エラー", "mobile.login_options.cant_heading": "ログインできませんでした", "mobile.login_options.enter_credentials": "以下にログイン情報を入力してください。", + "mobile.login_options.entraid": "Entra ID", "mobile.login_options.gitlab": "GitLab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "アカウントにログインする", "mobile.login_options.none": "まだアカウントにログインできません。少なくとも一つのログインオプションが設定されている必要があります。システム管理者に問い合わせてください。", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "以下からログイン方法を選択してください。", @@ -645,9 +682,7 @@ "mobile.manage_members.section_title_members": "メンバー", "mobile.managed.blocked_by": "{vendor}によりブロックされました", "mobile.managed.exit": "終了", - "mobile.managed.jailbreak": "ジェイルブレイクされたデバイスは {vendor} から信頼されていません。\n\n理由 {reason}\n\n\n\nデバッグ情報: {debug}\n\nアプリを終了してください。", - "mobile.managed.jailbreak_no_debug_info": "利用不可", - "mobile.managed.jailbreak_no_reason": "利用不可", + "mobile.managed.jailbreak": "ジェイルブレイクされたデバイスは {vendor} から信頼されていません。\n\nこのアプリを終了します。", "mobile.managed.not_secured.android": "このデバイスでMattermostを使うにはスクリーンロックを設定する必要があります。", "mobile.managed.not_secured.ios": "このデバイスでMattermostを使うにはパスコードを設定する必要があります。\n\n設定 > Face IDとパスコード から設定してください。", "mobile.managed.not_secured.ios.touchId": "このデバイスでMattermostを使うにはパスコードを設定する必要があります。\n\n設定 > Touch IDとパスコード から設定してください。", @@ -669,8 +704,9 @@ "mobile.oauth.failed_to_login": "ログインできませんでした。再度試してみてください。", "mobile.oauth.failed_to_open_link": "リンクを開けませんでした。再度試してみてください。", "mobile.oauth.failed_to_open_link_no_browser": "リンクを開けませんでした。デバイスにブラウザがインストールされているか確認してください。", - "mobile.oauth.something_wrong": "問題が発生しました", "mobile.oauth.something_wrong.okButton": "OK", + "mobile.oauth.success.description": "サインイン中です。少々お待ちください...", + "mobile.oauth.success.title": "認証に成功しました", "mobile.oauth.switch_to_browser": "ログインプロバイダにリダイレクトされています", "mobile.oauth.switch_to_browser.error_title": "サインインエラー", "mobile.oauth.switch_to_browser.title": "リダイレクト中...", @@ -770,7 +806,7 @@ "mobile.system_message.update_channel_purpose_message.updated_from": "{username} がチャンネルの目的を {oldPurpose} から {newPurpose} へ更新しました", "mobile.system_message.update_channel_purpose_message.updated_to": "{username} がチャンネルの目的を {newPurpose} へ更新しました", "mobile.tos_link": "利用規約", - "mobile.user_list.deactivated": "無効にする", + "mobile.user_list.deactivated": "無効", "mobile.write_storage_permission_denied_description": "デバイスにファイルを保存します。設定を開き、{applicationName} にこのデバイスのファイルへの書き込みのアクセス権を付与してください。", "modal.manual_status.auto_responder.message_": "あなたのステータスを \"{status}\" に変更し、自動返信を無効化してもよろしいですか?", "modal.manual_status.auto_responder.message_away": "あなたのステータスを \"離席中\" に変更し、自動返信を無効化してもよろしいですか?", @@ -791,6 +827,16 @@ "notification_settings.auto_responder.footer.message": "外出中や休暇中などの期間中、ダイレクトメッセージへの返信として自動送信されるカスタムメッセージを設定してください。この設定を有効にすると、あなたのステータスは外出中に変更され、通知が無効になります。", "notification_settings.auto_responder.message": "メッセージ", "notification_settings.auto_responder.to.enable": "自動返信を有効にする", + "notification_settings.call_notification": "通話に関する通知", + "notification_settings.calls": "通話に関する通知", + "notification_settings.calls.callsInfo": "注意: 着信音のプレビューを聞くにはマナーモードをオフにする必要があります。", + "notification_settings.calls.calm": "Calm", + "notification_settings.calls.cheerful": "Cheerful", + "notification_settings.calls.dynamic": "Dynamic", + "notification_settings.calls.enable_sound": "着信の通知音", + "notification_settings.calls.urgent": "Urgent", + "notification_settings.calls_off": "オフ", + "notification_settings.calls_on": "オン", "notification_settings.email": "電子メール通知", "notification_settings.email.crt.emailInfo": "有効な場合、あなたがフォローしているスレッドへ返信があると電子メール通知が送信されます", "notification_settings.email.crt.send": "スレッド返信通知", @@ -948,6 +994,8 @@ "screen.search.results.filter.title": "ファイル形式で絞り込む", "screen.search.results.filter.videos": "動画", "screen.search.title": "検索", + "screens.channel_bookmark_add": "ブックマークを追加する", + "screens.channel_bookmark_edit": "ブックマークを編集", "screens.channel_edit": "チャンネルを編集する", "screens.channel_edit_header": "チャンネルヘッダを編集", "screens.channel_info": "チャンネル情報", @@ -961,6 +1009,7 @@ "select_team.title": "チームを選択する", "server.invalid.certificate.description": "このサーバーの証明書は無効です。\n\"{hostname}\" を装ったサーバーに接続しようとしている可能性があり、機密情報が危険にさらされる可能性があります。", "server.invalid.certificate.title": "無効なSSL証明書", + "server.invalid.pinning.title": "不正なピン留めされたSSL証明書", "server.logout.alert_description": "関連するデータはすべて削除されます", "server.logout.alert_title": "本当に {displayName} からログアウトしますか?", "server.remove.alert_description": "これにより、サーバーのリストから削除されます。関連するデータはすべて削除されます", @@ -993,7 +1042,7 @@ "settings.about.server.version": "サーバーのバージョン: {version} (Build {buildNumber})", "settings.about.server.version.noBuild": "サーバーのバージョン: {version}", "settings.about.server.version.title": "サーバーのバージョン:", - "settings.about.server.version.value": "{version} (Build {number})", + "settings.about.server.version.value": "{version} (Build {buildNumber})", "settings.advanced.cancel": "キャンセル", "settings.advanced.delete": "削除", "settings.advanced.delete_data": "ローカルファイルを削除する", @@ -1042,6 +1091,7 @@ "skintone_selector.tooltip.title": "デフォルトの肌の色を選択", "smobile.search.recent_title": "{teamName} での最近の検索", "snack.bar.channel.members.added": "{numMembers, number} {numMembers, plural, one {メンバー} other {メンバー}} が追加されました", + "snack.bar.code.copied": "クリップボードにコードがコピーされました", "snack.bar.favorited.channel": "このチャンネルはお気に入り済みです", "snack.bar.following.thread": "スレッドをフォローしました", "snack.bar.info.copied": "情報がクリップボードにコピーされました", @@ -1065,6 +1115,7 @@ "suggestion.mention.groups": "グループメンション", "suggestion.mention.here": "このチャンネルの現在オンラインの人に通知", "suggestion.mention.morechannels": "他のチャンネル", + "suggestion.mention.nonmembers": "チャンネルにいません", "suggestion.mention.special": "特殊なメンション", "suggestion.mention.users": "ユーザー", "suggestion.search.direct": "ダイレクトメッセージ", diff --git a/assets/base/i18n/ko.json b/assets/base/i18n/ko.json index 6dd838cf226..d62b83d4737 100644 --- a/assets/base/i18n/ko.json +++ b/assets/base/i18n/ko.json @@ -430,7 +430,6 @@ "mobile.calls_call_ended": "통화 종료됨", "mobile.calls_call_screen": "통화", "mobile.calls_call_thread": "통화 글타래", - "mobile.calls_current_call": "현재 통화", "mobile.calls_disable": "통화 비활성화", "mobile.calls_dismiss": "취소", "mobile.calls_enable": "통화 활성화", @@ -465,7 +464,6 @@ "mobile.calls_more": "더 보기", "mobile.calls_mute": "음소거", "mobile.calls_name_is_talking_postfix": "말하고 있습니다...", - "mobile.calls_name_started_call": "{name}가 통화를 시작했습니다", "mobile.calls_noone_talking": "아무도 말하지 않음", "mobile.calls_not_available_msg": "이 기능을 사용하려면 시스템 관리자에게 문의하세요.", "mobile.calls_not_available_option": "(사용 불가)", @@ -482,7 +480,6 @@ "mobile.calls_raise_hand": "손 들기", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# more }}가 손을 들었습니다", "mobile.calls_react": "반응하기", - "mobile.calls_rec": "녹화", "mobile.calls_record": "녹화", "mobile.calls_recording_start_in_progress": "녹화가 이미 진행 중입니다.", "mobile.calls_recording_start_no_permissions": "녹음을 시작할 수 있는 권한이 없습니다. 통화 호스트에게 녹음을 시작하도록 요청하세요.", @@ -583,7 +580,6 @@ "mobile.login_options.google": "Google", "mobile.login_options.heading": "계정에 로그인", "mobile.login_options.none": "아직 계정에 로그인할 수 없습니다. 하나 이상의 로그인 옵션을 구성해야 합니다. 시스템 관리자에게 도움을 요청하세요.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "ID 열기", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "아래에서 로그인 옵션을 선택합니다.", @@ -605,8 +601,6 @@ "mobile.managed.blocked_by": "{vendor}에 의해 차단됨", "mobile.managed.exit": "종료", "mobile.managed.jailbreak": "탈옥된 기기는 {vendor}에서 신뢰하지 않습니다.\n\n사유 {reason}\n\n\n\n디버그 정보: {debug}\n\n앱을 종료해주세요.", - "mobile.managed.jailbreak_no_debug_info": "(사용 불가)", - "mobile.managed.jailbreak_no_reason": "(사용 불가)", "mobile.managed.not_secured.android": "Mattermost를 사용하려면 이 장치를 화면 잠금으로 보호해야 합니다.", "mobile.managed.not_secured.ios": "Matttermost를 사용하려면 이 장치를 암호로 보호해야 합니다.\n\n설정 > Face ID 및 암호.", "mobile.managed.not_secured.ios.touchId": "Matttermost를 사용하려면 이 장치를 암호로 보호해야 합니다.\n\n설정 > Touch ID 및 암호.", @@ -626,9 +620,6 @@ "mobile.no_results_with_term.files": "일치하는 파일 없음 \"{term}\"", "mobile.no_results_with_term.messages": "\"{term}\" 일치하는 항목이 없습니다", "mobile.oauth.failed_to_login": "로그인 시도에 실패했습니다. 다시 시도해주세요.", - "mobile.oauth.failed_to_open_link": "링크를 열지 못했습니다. 다시 시도해주세요.", - "mobile.oauth.failed_to_open_link_no_browser": "링크를 열지 못했습니다. 장치에 브라우저가 설치되어 있는지 확인하세요.", - "mobile.oauth.something_wrong": "문제가 발생했습니다", "mobile.oauth.something_wrong.okButton": "확인", "mobile.oauth.switch_to_browser": "로그인 제공업체로 리디렉션됩니다", "mobile.oauth.switch_to_browser.error_title": "로그인 오류", diff --git a/assets/base/i18n/lt.json b/assets/base/i18n/lt.json index 5d6590d6178..b69fa28b366 100644 --- a/assets/base/i18n/lt.json +++ b/assets/base/i18n/lt.json @@ -304,9 +304,6 @@ "mobile.message_length.message_split_left": "Pranešimas viršija simbolių limitą", "mobile.message_length.title": "Pranešimo ilgis", "mobile.oauth.failed_to_login": "Jums nepavyko prisijungti. Bandykite dar.", - "mobile.oauth.failed_to_open_link": "Nepavyko atidaryti nuorodos. Bandykite dar.", - "mobile.oauth.failed_to_open_link_no_browser": "Nepavyko atidaryti nuorodos. Patikrinkite, ar naršyklė yra įdiegta dabartinėje erdvėje.", - "mobile.oauth.something_wrong": "Kažkas nutiko", "mobile.oauth.switch_to_browser": "Norėdami užbaigti prisijungimą, naudokitės naršykle.", "mobile.oauth.try_again": "Bandyti dar", "mobile.open_dm.error": "Nepavyko atidaryti tiesioginio pranešimo su {displayName}. Patikrinkite ryšį ir bandykite dar kartą.", diff --git a/assets/base/i18n/ml.json b/assets/base/i18n/ml.json index e31237f54ad..8d2a05e3f17 100644 --- a/assets/base/i18n/ml.json +++ b/assets/base/i18n/ml.json @@ -1,293 +1,293 @@ { - "about.enterpriseEditione1": "എന്റർപ്രൈസ് പതിപ്പ്", - "about.teamEditiont0": "ടീം പതിപ്പ്", - "about.teamEditionSt": "നിങ്ങളുടെ എല്ലാ ടീം ആശയവിനിമയങ്ങളും ഒരിടത്ത്, എവിടെനിന്നും തൽക്ഷണം തിരയാനും ഉപയോഗിക്കാനും കഴിയും.", - "about.enterpriseEditionLearn": "എന്റർപ്രൈസ് പതിപ്പിനെക്കുറിച്ച് കൂടുതലറിയുക ", - "apps.error.parser.no_slash_start": "കമാൻഡ് ആരംഭിക്കേണ്ടത് `/`.", - "api.channel.add_member.added": "{addedUsername} ചാനലിൽ ചേർത്തു {username}.", - "about.teamEditionLearn": "എന്നതിൽ മറ്റെർമോസ്റ് കമ്മ്യൂണിറ്റിയിൽ ചേരുക ", - "about.hashee": "EE നിർമാണ ഹാഷ്:", - "about.hash": "നിർമാണ ഹാഷ്:", - "apps.error": "തെറ്റ്: {error}", - "api.channel.guest_join_channel.post_and_forget": "{username} ചാനലിൽ അതിഥിയായി ചേർന്നു.", - "apps.error.form.submit.pretext": "മോഡൽ സമർപ്പിക്കുന്നതിൽ ഒരു പിശകുണ്ടായി. ആപ്പ് ഡെവലപ്പറുമായി ബന്ധപ്പെടുക.വിശദാംശങ്ങൾ: {details}", - "apps.error.form.refresh": "തിരഞ്ഞെടുത്ത ഫീൽഡുകൾ ലഭ്യമാക്കുന്നതിൽ ഒരു തെറ്റുണ്ടായി. ആപ്പ് ഡെവലപ്പറുമായി ബന്ധപ്പെടുക.വിശദാംശങ്ങൾ: {details}", - "apps.error.form.no_form": "`form` നിർവ്വചിച്ചിട്ടില്ല.", - "about.date": "നിർമ്മാണ തീയതി:", - "about.teamEditiont1": "എന്റർപ്രൈസ് പതിപ്പ്", - "apps.error.parser.multiple_equal": "അനേക `=` അടയാളങ്ങൾ അനുവദനീയമല്ല.", - "apps.error.parser.unexpected_error": "അപ്രതീക്ഷിത തെറ്റ്.", - "apps.error.parser.no_argument_pos_x": "വാദം തിരിച്ചറിയാൻ കഴിയുന്നില്ല.", - "apps.error.parser.execute_non_leaf": "നിങ്ങൾ ഒരു സബ്കമാൻഡ് തിരഞ്ഞെടുക്കണം.", - "api.channel.add_guest.added": "{addedUsername} ചാനലിലേക്ക് അതിഥിയായി ചേർത്തു {username}.", - "apps.error.command.unknown_channel": "ഫീൽഡിനായുള്ള അജ്ഞാത ചാനൽ `{fieldName}`: `{option}`.", - "apps.error.command.field_missing": "ആവശ്യമായ ഫീൽഡുകൾ കാണുന്നില്ല: `{fieldName}`.", - "apps.error.command.unknown_user": "ഫീൽഡിനായുള്ള അജ്ഞാത ഉപയോക്താവ് `{fieldName}`: `{option}`.", - "apps.error.command.unknown_option": "ഫീൽഡിനുള്ള അജ്ഞാത ഓപ്ഷൻ `{fieldName}`:`{option}`.", - "apps.error.form.refresh_no_refresh": "പുതുക്കാത്ത ഫീൽഡിൽ പുതുക്കൽ എന്ന് വിളിക്കുന്നു.", - "about.enterpriseEditionSt": "നിങ്ങളുടെ ഫയർവാളിന് പിന്നിൽ നിന്നുള്ള ആധുനിക ആശയവിനിമയം.", - "channel_header.directchannel.you": "{displayname} (നിങ്ങൾ) ", - "apps.error.responses.unexpected_error": "ഒരു അപ്രതീക്ഷിത തെറ്റ് ലഭിച്ചു.", - "apps.error.parser.unexpected_flag": "കമാൻഡ് ഫ്ലാഗ് `{flagName}` സ്വീകരിക്കുന്നില്ല.", - "channel_modal.purposeEx": "ഉദാ: \"ബഗുകളും മെച്ചപ്പെടുത്തലുകളും ഫയൽ ചെയ്യാനുള്ള ഒരു ചാനൽ\"", - "channel_modal.purpose": "ഉദ്ദേശ്യം", - "channel_modal.optional": "(ഓപ്ഷണൽ)", - "channel_modal.nameEx": "ഉദാ: \"ബഗ്ഗുകൾ\", \"മാർക്കറ്റിംഗ്\", \"客户支持\"", - "channel_modal.name": "പേര്", - "channel_modal.headerHelp": "ചാനലിന്റെ പേരിന് അരികിൽ ചാനലിന്റെ തലക്കെട്ടിൽ ദൃശ്യമാകുന്ന വാചകം സജ്ജീകരിക്കുക. ഉദാഹരണത്തിന്, [ലിങ്ക് ശീർഷകം](http://example.com) എന്ന് ടൈപ്പ് ചെയ്തുകൊണ്ട് പതിവായി ഉപയോഗിക്കുന്ന ലിങ്കുകൾ ഉൾപ്പെടുത്തുക.", - "channel_loader.someone": "ആരോ", - "channel_info.header": "തലക്കെട്ട്:", - "apps.error.parser.unexpected_whitespace": "എത്തിച്ചേരാനാകാത്തത്: അപ്രതീക്ഷിതമായ ഇടം.", - "apps.error.parser.unexpected_state": "എത്തിച്ചേരാനാകുന്നില്ല: മാച്ച് ബൈൻഡിംഗിലെ അപ്രതീക്ഷിത അവസ്ഥ: `{state}`.", - "apps.error.parser.missing_field_value": "ഫീൽഡ് മൂല്യം കാണുന്നില്ല.", - "apps.error.parser.empty_value": "ശൂന്യമായ മൂല്യങ്ങൾ അനുവദനീയമല്ല", - "apps.error.parser": "പാഴ്സിംഗിലെ തെറ്റ്:{error}", - "apps.error.responses.unknown_field_error": "ഒരു അജ്ഞാത ഫീൽഡിനായി ഒരു തെറ്റ് ലഭിച്ചു. ഫീൽഡിന്റെ പേര്: `{field}`. തെറ്റ്: `{error}`.", - "apps.suggestion.errors.parser_error": "പാർസിങ്ങിലെ തെറ്റ്", - "global_threads.emptyThreads.title": "ഇതുവരെ പിന്തുടരുന്ന ത്രെഡുകളൊന്നുമില്ല", - "global_threads.emptyThreads.message": "നിങ്ങൾ പരാമർശിച്ചതോ പങ്കെടുത്തതോ ആയ എല്ലാ ത്രെഡുകളും നിങ്ങൾ പിന്തുടരുന്ന ത്രെഡുകൾക്കൊപ്പം ഇവിടെ കാണിക്കും.", - "get_post_link_modal.title": "ലിങ്ക് പകർത്തുക", - "gallery.open_file": "ഫയൽ തുറക്കുക", - "gallery.footer.channel_name": "{channelName}-ൽ പങ്കിട്ടു", - "friendly_date.yesterday": "ഇന്നലെ", - "emoji_picker.travel-places": "യാത്രയും സ്ഥലങ്ങളും", - "emoji_picker.symbols": "ചിഹ്നങ്ങൾ", - "emoji_picker.smileys-emotion": "സ്മൈലികളും ഇമോഷനും", - "emoji_picker.searchResults": "തിരയൽ ഫലങ്ങൾ", - "emoji_picker.recent": "അടുത്തിടെ", - "emoji_picker.people-body": "ആളുകളും ശരീരവും", - "emoji_picker.objects": "വസ്തുക്കൾ", - "emoji_picker.food-drink": "ഭക്ഷണവും പാനീയവും", - "emoji_picker.animals-nature": "മൃഗങ്ങളും പ്രകൃതിയും", - "emoji_picker.activities": "പ്രവർത്തനങ്ങൾ", - "edit_post.save": "സേവ്", - "edit_post.editPost": "പോസ്റ്റ് എഡിറ്റ് ചെയ്യുക...", - "date_separator.yesterday": "ഇന്നലെ", - "date_separator.today": "ഇന്ന്", - "custom_status.suggestions.working_from_home": "വീട്ടിൽ നിന്ന് ജോലി ചെയ്യുന്നു", - "custom_status.suggestions.title": "നിർദ്ദേശങ്ങൾ", - "custom_status.suggestions.recent_title": "സമീപകാല", - "custom_status.suggestions.out_sick": "അസുഖമായി പുറത്ത്", - "custom_status.suggestions.out_for_lunch": "ഉച്ചഭക്ഷണത്തിന് പുറത്ത്", - "custom_status.suggestions.on_a_vacation": "ഒരു അവധിക്കാലത്ത്", - "custom_status.suggestions.in_a_meeting": "ഒരു മീറ്റിംഗിൽ", - "custom_status.set_status": "ഒരു സ്റ്റാറ്റസ് സജ്ജമാക്കുക", - "custom_status.failure_message": "സ്റ്റാറ്റസ് അപ്ഡേറ്റ് ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക", - "custom_status.expiry.until": "വരുവോളം", - "custom_status.expiry_time.tomorrow": "നാളെ", - "custom_status.expiry_time.today": "ഇന്ന്", - "custom_status.expiry_dropdown.today": "ഇന്ന്", - "custom_status.expiry_dropdown.this_week": "ഈ ആഴ്ച", - "custom_status.expiry_dropdown.thirty_minutes": "30 മിനിറ്റ്", - "custom_status.expiry_dropdown.one_hour": "1 മണിക്കൂർ", - "custom_status.expiry_dropdown.four_hours": "4 മണിക്കൂർ", - "custom_status.expiry_dropdown.dont_clear": "വ്യക്തമാക്കരുത്", - "custom_status.expiry_dropdown.date_and_time": "തീയതിയും സമയവും", - "create_post.write": "{channelDisplayName}-ലേക്ക് എഴുതുക", - "create_post.deactivated": "നിർജ്ജീവമാക്കിയ ഒരു ഉപയോക്താവിനൊപ്പം ആർക്കൈവ് ചെയ്ത ചാനൽ നിങ്ങൾ കാണുന്നു.", - "combined_system_message.you": "നിങ്ങൾ", - "combined_system_message.removed_from_team.two": "{firstUser}, {secondUser} എന്നിവരെ **ടീമിൽ നിന്ന് നീക്കം ചെയ്തു**.", - "combined_system_message.removed_from_team.one_you": "നിങ്ങളെ **ടീമിൽ നിന്ന് നീക്കം ചെയ്‌തു**.", - "combined_system_message.removed_from_team.one": "{firstUser} **ടീമിൽ നിന്ന് നീക്കം ചെയ്യപ്പെട്ടു**.", - "combined_system_message.removed_from_team.many_expanded": "{users}, {lastUser} എന്നിവരെ **ടീമിൽ നിന്ന് നീക്കം ചെയ്തു**.", - "channel_modal.descriptionHelp": "ഈ ചാനൽ എങ്ങനെ ഉപയോഗിക്കണമെന്ന് വിവരിക്കുക.", - "center_panel.archived.closeChannel": "ചാനൽ അവസാനിപ്പിക്കുക", - "camera_type.video.option": "വീഡിയോ റെക്കോർഡ് ചെയ്യുക", - "camera_type.photo.option": "ഫോട്ടോ എടുക്കുക", - "archivedChannelMessage": "നിങ്ങൾ **ആർക്കൈവ് ചെയ്‌ത ചാനൽ** കാണുന്നു. പുതിയ സന്ദേശങ്ങൾ പോസ്റ്റ് ചെയ്യാൻ കഴിയില്ല.", - "apps.suggestion.no_suggestion": "പൊരുത്തപ്പെടുന്ന നിർദ്ദേശങ്ങളൊന്നുമില്ല.", - "apps.suggestion.no_static": "പൊരുത്തപ്പെടുന്ന ഓപ്ഷനുകളൊന്നുമില്ല.", - "apps.error.unknown": "അജ്ഞാത തെറ്റ് സംഭവിച്ചു.", - "apps.error.responses.unknown_type": "ആപ്പ് പ്രതികരണ തരം പിന്തുണയ്ക്കുന്നില്ല. പ്രതികരണ തരം: {type}.", - "apps.error.responses.unexpected_type": "ആപ്പ് പ്രതികരണ തരം പ്രതീക്ഷിച്ചിരുന്നില്ല. പ്രതികരണ തരം: {type}.", - "apps.error.responses.navigate.no_url": "പ്രതികരണ തരം `നാവിഗേറ്റ്` ആണ്, എന്നാൽ പ്രതികരണത്തിൽ url ഒന്നും ഉൾപ്പെടുത്തിയിട്ടില്ല.", - "apps.error.responses.form.no_form": "പ്രതികരണ തരം `ഫോം` ആണ്, എന്നാൽ പ്രതികരണത്തിൽ ഒരു ഫോമും ഉൾപ്പെടുത്തിയിട്ടില്ല.", - "apps.error.parser.no_match": "`{command}`: ഈ വർക്ക്‌സ്‌പെയ്‌സിൽ പൊരുത്തപ്പെടുന്ന കമാൻഡ് ഒന്നും കണ്ടെത്തിയില്ല.", - "combined_system_message.removed_from_channel.two": "{firstUser}, {secondUser} എന്നിവരെ **ചാനലിൽ നിന്ന് നീക്കം ചെയ്തു**.", - "combined_system_message.removed_from_channel.one_you": "നിങ്ങളെ **ചാനലിൽ നിന്ന് നീക്കം ചെയ്തു**.", - "combined_system_message.removed_from_channel.one": "{firstUser} **ചാനലിൽ നിന്ന് നീക്കം ചെയ്യപ്പെട്ടു**.", - "combined_system_message.removed_from_channel.many_expanded": "{users}, {lastUser} എന്നിവരെ **ചാനലിൽ നിന്ന് **നീക്കം ചെയ്തു.", - "combined_system_message.left_team.two": "{firstUser}, {secondUser} എന്നിവർ **ടീം വിട്ടു**.", - "combined_system_message.left_team.one_you": "നിങ്ങൾ **ടീം വിട്ടു**.", - "combined_system_message.left_team.one": "{firstUser} **ടീം വിട്ടു**.", - "combined_system_message.left_team.many_expanded": "{users} കൂടാതെ {lastUser} **ടീം വിട്ടു**.", - "combined_system_message.left_channel.two": "{firstUser}, {secondUser} എന്നിവർ **ചാനൽ വിട്ടു**.", - "combined_system_message.left_channel.one_you": "നിങ്ങൾ **ചാനൽ വിട്ടു**.", - "combined_system_message.left_channel.one": "{firstUser} **ചാനൽ വിട്ടു**.", - "combined_system_message.left_channel.many_expanded": "{users} കൂടാതെ {lastUser} **ചാനൽ വിട്ടു**.", - "combined_system_message.joined_team.two": "{firstUser}, {secondUser} എന്നിവർ **ടീമിൽ ചേർന്നു**.", - "combined_system_message.added_to_team.many_expanded": "{users}, {lastUser} എന്നിവരെ **ടീമിലേക്ക് ചേർത്തത്** {actor} ആണ്.", - "combined_system_message.added_to_channel.one_you": "നിങ്ങളെ **ചാനലിലേക്ക് ചേർത്തത്** {actor} ആണ്.", - "combined_system_message.joined_team.one_you": "നിങ്ങൾ **ടീമിൽ ചേർന്നു**.", - "combined_system_message.joined_team.one": "{firstUser} **ടീമിൽ** ചേർന്നു.", - "combined_system_message.joined_team.many_expanded": "{users}, {lastUser} എന്നിവർ **ടീമിൽ** ചേർന്നു.", - "combined_system_message.joined_channel.two": "{firstUser}, {secondUser} എന്നിവർ **ചാനലിൽ** ചേർന്നു.", - "combined_system_message.joined_channel.one_you": "നിങ്ങൾ **ചാനലിൽ** ചേർന്നു.", - "combined_system_message.joined_channel.one": "{firstUser} **ചാനലിൽ** ചേർന്നു.", - "combined_system_message.joined_channel.many_expanded": "{users}, {lastUser} എന്നിവർ **ചാനലിൽ** ചേർന്നു.", - "combined_system_message.added_to_team.two": "{firstUser}, {secondUser} എന്നിവരെ **ടീമിലേക്ക് ചേർത്തു** {actor}.", - "combined_system_message.added_to_team.one_you": "നിങ്ങളെ ടീമിലേക്ക് ** ചേർത്തത് {actor} ആണ്.", - "combined_system_message.added_to_team.one": "{firstUser} **ടീമിലേക്ക് ചേർത്തത്** {actor}.", - "combined_system_message.added_to_channel.two": "{firstUser}, {secondUser} എന്നിവ **ചാനലിലേക്ക് ചേർത്തത്** {actor}.", - "combined_system_message.added_to_channel.one": "{firstUser} **ചാനലിൽ ചേർത്തത്** {actor}.", - "combined_system_message.added_to_channel.many_expanded": "{users}, {lastUser} എന്നിവരെ **ചാനലിലേക്ക്** ചേർത്തത് {actor} ആണ്.", - "channel_modal.headerEx": "ഉദാ: \"[ലിങ്ക് ശീർഷകം](http://example.com)\"", - "apps.error.parser.no_bindings": "കമാൻഡ് ബൈൻഡിംഗുകളൊന്നുമില്ല.", - "global_threads.options.open_in_channel": "ചാനലിൽ തുറക്കുക", - "global_threads.markAllRead.cancel": "റദ്ദാക്കുക", - "file_upload.fileAbove": "ഫയലുകൾ {max}-ൽ കുറവായിരിക്കണം", - "mobile.camera_photo_permission_denied_description": "ഫോട്ടോകൾ എടുത്ത് അവ നിങ്ങളുടെ മാറ്റർമോസ്‌റ്റിലേക്ക് അപ്‌ലോഡ് ചെയ്യുക അല്ലെങ്കിൽ നിങ്ങളുടെ ഉപകരണത്തിൽ സംരക്ഷിക്കുക. നിങ്ങളുടെ ക്യാമറയിലേക്ക് Mattermost Read and Write ആക്‌സസ് അനുവദിക്കുന്നതിന് ക്രമീകരണം തുറക്കുക.", - "mobile.announcement_banner.title": "പ്രഖ്യാപനം", - "mobile.android.photos_permission_denied_title": "{applicationName} നിങ്ങളുടെ ഫോട്ടോകൾ ആക്സസ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നു", - "mobile.android.photos_permission_denied_description": "നിങ്ങളുടെ മാറ്റർമോസ്റ്റ് ഇൻസ്‌റ്റൻസിലേക്ക് ഫോട്ടോകൾ അപ്‌ലോഡ് ചെയ്യുക അല്ലെങ്കിൽ അവ നിങ്ങളുടെ ഉപകരണത്തിൽ സംരക്ഷിക്കുക. നിങ്ങളുടെ ഫോട്ടോ ലൈബ്രറിയിലേക്ക് Mattermost Read and Write ആക്‌സസ് അനുവദിക്കുന്നതിന് ക്രമീകരണം തുറക്കുക.", - "mobile.android.back_handler_exit": "പുറത്തുകടക്കാൻ വീണ്ടും അമർത്തുക", - "mobile.about.appVersion": "ആപ്പ് പതിപ്പ്: {version} (Build {number})", - "login.username": "ഉപയോക്തൃനാമം", - "login.signIn": "സൈൻ ഇൻ", - "login.password": "പാസ്സ്‌വേർഡ്", - "login.or": "അഥവാ", - "login.ldapUsername": "AD/LDAP ഉപയോക്തൃനാമം", - "login.forgot": "ഞാൻ എന്റെ പാസ്സ്‌വേർഡ് മറന്നു", - "login.email": "ഇമെയിൽ", - "login_mfa.tokenReq": "ദയവായി ഒരു MFA ടോക്കൺ നൽകുക", - "login_mfa.token": "MFA ടോക്കൺ", - "login_mfa.enterToken": "സൈൻ ഇൻ പ്രോസസ്സ് പൂർത്തിയാക്കാൻ, നിങ്ങളുടെ സ്മാർട്ട്ഫോണിന്റെ ഓതന്റിക്കേറ്ററിൽ നിന്ന് ഒരു ടോക്കൺ നൽകുക", - "last_users_message.removed_from_team.type": "**ടീമിൽ നിന്ന് നീക്കം ചെയ്യപ്പെട്ടു**.", - "last_users_message.removed_from_channel.type": "**ചാനലിൽ നിന്ന് നീക്കപ്പെട്ടു**.", - "last_users_message.others": "മറ്റ് {numOthers} ", - "last_users_message.left_team.type": "**ടീം വിട്ടു**.", - "last_users_message.left_channel.type": "**ചാനൽ വിട്ടു**.", - "last_users_message.joined_team.type": "**ടീമിൽ ചേർന്നു**.", - "last_users_message.joined_channel.type": "**ചാനലിൽ ചേർന്നു**.", - "last_users_message.added_to_team.type": "{actor} ആണ് **ടീമിലേക്ക് ചേർത്തത്**.", - "last_users_message.added_to_channel.type": "**ചാനലിൽ ചേർക്കുന്നത്** {actor} ആണ്.", - "global_threads.markAllRead.message": "ഇവിടെ കാണിച്ചിരിക്കുന്ന നിങ്ങളുടെ എല്ലാ ത്രെഡുകൾക്കുമായി ഇത് വായിക്കാത്ത സ്റ്റാറ്റസ് മായ്‌ക്കും", - "friendly_date.now": "ഇപ്പോൾ", - "mobile.camera_photo_permission_denied_title": "{applicationName} നിങ്ങളുടെ ക്യാമറ ആക്സസ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നു", - "mobile.action_menu.select": "ഒരു ഓപ്ഷൻ തിരഞ്ഞെടുക്കുക", - "mobile.account.settings.save": "സേവ്", - "last_users_message.first": "{firstUser} ഒപ്പം ", - "global_threads.unreads": "വായിക്കാത്തവ", - "mobile.create_channel": "സൃഷ്ടിക്കാൻ", - "mobile.components.select_server_view.proceed": "തുടരുക", - "mobile.components.select_server_view.enterServerUrl": "സെർവർ URL നൽകുക", - "mobile.components.select_server_view.connecting": "ബന്ധിപ്പിക്കുന്നു...", - "mobile.channel_info.alertYes": "അതെ", - "mobile.channel_info.alertNo": "അല്ല", - "channel_modal.header": "തലക്കെട്ട്", - "mobile.join_channel.error": "ഞങ്ങൾക്ക് {displayName} ചാനലിൽ ചേരാനായില്ല. ദയവായി നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.", - "mobile.ios.photos_permission_denied_title": "{applicationName} നിങ്ങളുടെ ഫോട്ടോകൾ ആക്സസ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നു", - "mobile.ios.photos_permission_denied_description": "ഫോട്ടോകളും വീഡിയോകളും നിങ്ങളുടെ മാറ്റർമോസ്റ്റ് ഇൻസ്‌റ്റൻസിലേക്ക് അപ്‌ലോഡ് ചെയ്യുക അല്ലെങ്കിൽ അവ നിങ്ങളുടെ ഉപകരണത്തിൽ സംരക്ഷിക്കുക. നിങ്ങളുടെ ഫോട്ടോ, വീഡിയോ ലൈബ്രറിയിലേക്ക് മാറ്റർമോസ്റ്റ് റീഡും റൈറ്റും ആക്‌സസ് അനുവദിക്കുന്നതിന് ക്രമീകരണം തുറക്കുക.", - "mobile.link.error.title": "തെറ്റ്", - "mobile.error_handler.title": "അപ്രതീക്ഷിത തെറ്റ് സംഭവിച്ചു", - "mobile.error_handler.description": "\nആപ്പ് വീണ്ടും തുറക്കാൻ റീലോഞ്ച് ടാപ്പ് ചെയ്യുക. പുനരാരംഭിച്ച ശേഷം, നിങ്ങൾക്ക് ക്രമീകരണ മെനുവിൽ നിന്ന് പ്രശ്നം റിപ്പോർട്ടുചെയ്യാനാകും.\n", - "mobile.error_handler.button": "വീണ്ടും സമാരംഭിക്കുക", - "mobile.edit_post.title": "സന്ദേശം എഡിറ്റുചെയ്യുന്നു", - "mobile.edit_channel": "സേവ്", - "mobile.downloader.failed_title": "ഡൗൺലോഡ് പരാജയപ്പെട്ടു", - "mobile.display_settings.theme": "തീം", - "mobile.create_post.read_only": "ഈ ചാനൽ വായിക്കാൻ മാത്രമുള്ളതാണ്", - "mobile.commands.error_title": "കമാൻഡ് നടപ്പിലാക്കുന്നതിൽ തെറ്റ്", - "mobile.channel_list.unreads": "വായിക്കാത്തവ", - "mobile.components.select_server_view.connect": "ബന്ധിപ്പിക്കുക", - "global_threads.options.title": "ത്രെഡ് പ്രവർത്തനങ്ങൾ", - "global_threads.emptyUnreads.title": "വായിക്കാത്ത ത്രെഡുകളൊന്നുമില്ല", - "global_threads.options.mark_as_read": "വായിച്ചതായി അടയാളപ്പെടുത്തുക", - "global_threads.markAllRead.title": "എല്ലാ ത്രെഡുകളും വായിച്ചതായി അടയാളപ്പെടുത്തണമെന്ന് തീർച്ചയാണോ?", - "global_threads.markAllRead.markRead": "വായിച്ചതായി അടയാളപ്പെടുത്തുക", - "global_threads.allThreads": "നിങ്ങളുടെ എല്ലാ ത്രെഡുകളും", - "friendly_date.monthsAgo": "{count} {count, plural, ഒരു {month} മറ്റ് {months}} മുമ്പ്", - "friendly_date.yearsAgo": "{count} {count, plural, ഒരു {വർഷം} മറ്റ് {വർഷം}} മുമ്പ്", - "friendly_date.minsAgo": "{count} {count, plural, ഒന്ന് {min} മറ്റൊന്ന് {mins}} മുമ്പ്", - "friendly_date.hoursAgo": "{count} {count, plural, ഒരു {hour} മറ്റ് {hours}} മുമ്പ്", - "friendly_date.daysAgo": "{count} {count, plural, ഒരു {day} മറ്റ് {days}} മുമ്പ്", - "emoji_picker.custom": "ഇഷ്ടാനുസൃതം", - "emoji_picker.flags": "ഫ്ലാഗുകൾ", - "emoji_skin.medium_skin_tone": "ഇടത്തരം ചർമ്മ നിറം", - "emoji_skin.medium_light_skin_tone": "ഇടത്തരം ഇളം ചർമ്മ നിറം", - "emoji_skin.medium_dark_skin_tone": "ഇടത്തരം ഇരുണ്ട ചർമ്മ നിറം", - "emoji_skin.light_skin_tone": "നേരിയ തൊലി നിറം", - "emoji_skin.default": "ഡിഫോൾട്ട് സ്കിൻ ടോൺ", - "emoji_skin.dark_skin_tone": "ഇരുണ്ട ചർമ്മ നിറം", - "custom_status.expiry_dropdown.custom": "ഇഷ്ടാനുസൃതം", - "apps.suggestion.dynamic.error": "ഡൈനാമിക് തിരഞ്ഞെടുക്കലിലെ തെറ്റ്", - "apps.suggestion.no_dynamic": "ഡൈനാമിക് നിർദ്ദേശങ്ങൾക്കായി ഡാറ്റയൊന്നും നൽകിയിട്ടില്ല", - "apps.error.lookup.error_preparing_request": "ലുക്കപ്പ് അഭ്യർത്ഥന തയ്യാറാക്കുന്നതിൽ തെറ്റ് : {errorMessage}", - "apps.error.parser.missing_tick": "ഇൻപുട്ട് അവസാനിക്കുന്നതിന് മുമ്പ് പ്രതീക്ഷിക്കുന്ന പൊരുത്തപ്പെടുന്ന ടിക്ക് ഉദ്ധരണി.", - "apps.error.parser.missing_quote": "ഇൻപുട്ട് അവസാനിക്കുന്നതിന് മുമ്പ് പ്രതീക്ഷിക്കുന്ന ഇരട്ട ഉദ്ധരണി പൊരുത്തപ്പെടുന്നു.", - "mobile.downloader.disabled_description": "ഈ സെർവറിൽ ഫയൽ ഡൗൺലോഡുകൾ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു. കൂടുതൽ വിവരങ്ങൾക്ക് നിങ്ങളുടെ സിസ്റ്റം അഡ്‌മിനെ ബന്ധപ്പെടുക.\n", - "mobile.document_preview.failed_title": "ഓപ്പൺ ഡോക്യുമെന്റ് പരാജയപ്പെട്ടു", - "mobile.document_preview.failed_description": "പ്രമാണം തുറക്കുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു. നിങ്ങൾക്ക് ഒരു {fileType} വ്യൂവർ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കി വീണ്ടും ശ്രമിക്കുക.\n", - "mobile.custom_status.modal_confirm": "ചെയ്തു", - "mobile.custom_status.clear_after": "ശേഷം മായ്ക്കുക", - "mobile.custom_status.choose_emoji": "ഒരു ഇമോജി തിരഞ്ഞെടുക്കുക", - "mobile.custom_list.no_results": "ഫലങ്ങളൊന്നുമില്ല", - "mobile.gallery.title": "{total}-ന്റെ {index}", - "mobile.files_paste.error_title": "ഒട്ടിക്കാനായില്ല", - "mobile.link.error.text": "ലിങ്ക് തുറക്കാനായില്ല.", - "mobile.message_length.title": "സന്ദേശ ദൈർഘ്യം", - "mobile.message_length.message_split_left": "സന്ദേശത്തിന്റെ അക്ഷര പരിധി കവിയുന്നു", - "mobile.message_length.message": "നിങ്ങളുടെ നിലവിലെ സന്ദേശം ദൈർഘ്യമേറിയതാണ്. നിലവിലെ അക്ഷരങ്ങളുടെ എണ്ണം: {count}/{max}", - "mobile.mention.copy_mention": "പരാമർശം കോപ്പി ചെയുക", - "mobile.markdown.link.copy_url": "URL പകർത്തുക", - "mobile.markdown.image.too_large": "ചിത്രം {maxWidth} എന്നതിന്റെ പരമാവധി അളവുകൾ {maxHeight} കവിയുന്നു:", - "mobile.markdown.code.plusMoreLines": "+{count, number} കൂടുതൽ {count, plural, one {line} other {lines}}", - "mobile.markdown.code.copy_code": "കോഡ് പകർത്തുക", - "mobile.managed.settings": "ക്രമീകരണങ്ങളിലേക്ക് പോകുക", - "mobile.managed.secured_by": "{vendor} സുരക്ഷിതമാക്കിയത്", - "mobile.managed.not_secured.ios.touchId": "Mattermost ഉപയോഗിക്കുന്നതിന് ഈ ഉപകരണം ഒരു പാസ്‌കോഡ് ഉപയോഗിച്ച് സുരക്ഷിതമാക്കിയിരിക്കണം.\n\nക്രമീകരണം > ടച്ച് ഐഡിയും പാസ്‌കോഡും എന്നതിലേക്ക് പോകുക.", - "mobile.managed.not_secured.ios": "Mattermost ഉപയോഗിക്കുന്നതിന് ഈ ഉപകരണം ഒരു പാസ്‌കോഡ് ഉപയോഗിച്ച് സുരക്ഷിതമാക്കിയിരിക്കണം.\n\nക്രമീകരണം > ഫേസ് ഐഡിയും പാസ്‌കോഡും എന്നതിലേക്ക് പോകുക.", - "mobile.managed.not_secured.android": "Mattermost ഉപയോഗിക്കുന്നതിന് ഈ ഉപകരണം ഒരു സ്‌ക്രീൻ ലോക്ക് ഉപയോഗിച്ച് സുരക്ഷിതമാക്കിയിരിക്കണം.", - "mobile.files_paste.error_dismiss": "പിരിച്ചുവിടുക", - "mobile.files_paste.error_description": "ഫയൽ(കൾ) ഒട്ടിക്കുമ്പോൾ ഒരു തെറ്റ് സംഭവിച്ചു. ദയവായി വീണ്ടും ശ്രമിക്കുക.", - "mobile.file_upload.max_warning": "അപ്‌ലോഡുകൾ പരമാവധി {count} ഫയലുകളായി പരിമിതപ്പെടുത്തിയിരിക്കുന്നു.", - "mobile.file_upload.disabled2": "മൊബൈലിൽ നിന്നുള്ള ഫയൽ അപ്‌ലോഡുകൾ പ്രവർത്തനരഹിതമാക്കി.", - "mobile.downloader.failed_description": "ഫയൽ ഡൗൺലോഡ് ചെയ്യുമ്പോൾ ഒരു തെറ്റ് സംഭവിച്ചു. നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.\n", - "mobile.downloader.disabled_title": "ഡൗൺലോഡ് പ്രവർത്തനരഹിതമാക്കി", - "mobile.managed.jailbreak": "ജയിൽ തകർന്ന ഉപകരണങ്ങളെ {vendor} വിശ്വസിക്കുന്നില്ല, ദയവായി ആപ്പിൽ നിന്ന് പുറത്തുകടക്കുക.", - "mobile.managed.exit": "പുറത്ത്", - "mobile.rename_channel.display_name_required": "ചാനലിന്റെ പേര് ആവശ്യമാണ്", - "mobile.push_notification_reply.title": "മറുപടി", - "mobile.push_notification_reply.placeholder": "മറുപടി എഴുതൂ...", - "mobile.push_notification_reply.button": "അയക്കുക", - "mobile.privacy_link": "സ്വകാര്യതാനയം", - "mobile.post.failed_retry": "വീണ്ടും ശ്രമിക്കുക", - "mobile.post.failed_delete": "സന്ദേശം ഇല്ലാതാക്കുക", - "mobile.post.delete_title": "പോസ്റ്റ് ഇല്ലാതാക്കുക", - "mobile.post.delete_question": "ഈ പോസ്റ്റ് ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ?", - "mobile.post_textbox.groups.title": "ഗ്രൂപ്പുകളിലേക്ക് അറിയിപ്പുകൾ അയയ്ക്കുന്നത് സ്ഥിരീകരിക്കുക", - "mobile.post_textbox.entire_channel.title": "മുഴുവൻ ചാനലിലേക്കും അറിയിപ്പുകൾ അയയ്ക്കുന്നത് സ്ഥിരീകരിക്കുക", - "mobile.post_textbox.entire_channel.confirm": "സ്ഥിരീകരിക്കുക", - "mobile.post_info.reply": "മറുപടി", - "mobile.post_info.pin": "ചാനലിലേക്ക് പിൻ ചെയ്യുക", - "mobile.post_info.copy_text": "വാചകം പകർത്തുക", - "mobile.post_info.add_reaction": "പ്രതികരണം ചേർക്കുക", - "mobile.permission_denied_retry": "ക്രമീകരണങ്ങൾ", - "mobile.permission_denied_dismiss": "അനുവദിക്കരുത്", - "mobile.participants.header": "ത്രെഡ് പങ്കാളികൾ", - "mobile.open_gm.error": "ആ ഉപയോക്താക്കളുമായി ഒരു ഗ്രൂപ്പ് സന്ദേശം തുറക്കാൻ ഞങ്ങൾക്ക് കഴിഞ്ഞില്ല. ദയവായി നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.", - "mobile.open_dm.error": "ഞങ്ങൾക്ക് {displayName} ഉപയോഗിച്ച് നേരിട്ടുള്ള സന്ദേശം തുറക്കാനായില്ല. ദയവായി നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.", - "mobile.oauth.try_again": "വീണ്ടും ശ്രമിക്കുക", - "post_body.commentedOn": "{name}{apostrophe} സന്ദേശത്തിൽ അഭിപ്രായമിട്ടു: ", - "post_body.check_for_out_of_channel_mentions.message.one": "പരാമർശിച്ചെങ്കിലും ചാനലിൽ ഇല്ല. ഇഷ്ടമുണ്ടോ ", - "post_body.check_for_out_of_channel_mentions.message.multiple": "പരാമർശിച്ചെങ്കിലും അവ ചാനലിലില്ല. ഇഷ്ടമുണ്ടോ ", - "post_body.check_for_out_of_channel_mentions.message_last": "? അവർക്ക് എല്ലാ സന്ദേശ ചരിത്രത്തിലേക്കും ആക്സസ് ഉണ്ടായിരിക്കും.", - "apps.error.parser.missing_binding": "കമാൻഡ് ബൈൻഡിംഗുകൾ നഷ്‌ടമായി.", - "apps.error.malformed_binding": "ഈ ബൈൻഡിങ് ശരിയായി രൂപപ്പെട്ടിട്ടില്ല. ആപ്പ് ഡെവലപ്പറെ ബന്ധപ്പെടുക.", - "user.settings.general.username": "ഉപയോക്തൃനാമം", - "user.settings.general.field_handled_externally": "നിങ്ങളുടെ ലോഗിൻ പ്രൊവൈഡർ വഴിയാണ് ഈ ഫീൽഡ് കൈകാര്യം ചെയ്യുന്നത്. നിങ്ങൾക്ക് ഇത് മാറ്റണമെങ്കിൽ, നിങ്ങളുടെ ലോഗിൻ പ്രൊവൈഡർ വഴി അത് മാറ്റേണ്ടതുണ്ട്.", - "user.settings.general.email": "ഇമെയിൽ", - "search_bar.search": "തിരയുക", - "posts_view.newMsg": "പുതിയ സന്ദേശങ്ങൾ", - "post_info.edit": "എഡിറ്റ് ചെയ്യുക", - "post_info.del": "ഇല്ലാതാക്കുക", - "post_body.check_for_out_of_channel_mentions.link.public": "അവരെ ചാനലിൽ ചേർക്കുക", - "post_body.check_for_out_of_channel_mentions.link.private": "അവരെ ഈ സ്വകാര്യ ചാനലിൽ ചേർക്കുക", - "post_body.check_for_out_of_channel_groups_mentions.message": "അവർ ചാനലിൽ ഇല്ലാത്തതിനാൽ ഈ പരാമർശം അറിയിപ്പ് ലഭിച്ചില്ല. ഈ ചാനലുമായി ലിങ്ക് ചെയ്‌തിരിക്കുന്ന ഗ്രൂപ്പുകളിൽ അവരും അംഗമല്ല.", - "permalink.show_dialog_warn.title": "സ്വകാര്യ ചാനലിൽ ചേരുക", - "permalink.show_dialog_warn.join": "ചേരുക", - "permalink.show_dialog_warn.description": "ചാനൽ അഡ്‌മിൻ വ്യക്തമായി ചേർക്കാതെ തന്നെ നിങ്ങൾ \"{channel}\"-ൽ ചേരാൻ പോകുകയാണ്. ഈ സ്വകാര്യ ചാനലിൽ ചേരണമെന്ന് തീർച്ചയാണോ?", - "password_send.link": "അക്കൗണ്ട് നിലവിലുണ്ടെങ്കിൽ, ഒരു പാസ്‌വേഡ് റീസെറ്റ് ഇമെയിൽ ഇതിലേക്ക് അയയ്‌ക്കും:", - "password_send.error": "ശരിയായ ഒരു ഇമെയിൽ വിലാസം നൽകുക.", - "password_send.description": "നിങ്ങളുടെ പാസ്‌വേഡ് പുനഃസജ്ജമാക്കാൻ, നിങ്ങൾ സൈൻ അപ്പ് ചെയ്യാൻ ഉപയോഗിച്ച ഇമെയിൽ വിലാസം നൽകുക" + "about.date": "നിർമ്മാണ തീയതി:", + "about.enterpriseEditionLearn": "എന്റർപ്രൈസ് പതിപ്പിനെക്കുറിച്ച് കൂടുതലറിയുക ", + "about.enterpriseEditionSt": "നിങ്ങളുടെ ഫയർവാളിന് പിന്നിൽ നിന്നുള്ള ആധുനിക ആശയവിനിമയം.", + "about.enterpriseEditione1": "എന്റർപ്രൈസ് പതിപ്പ്", + "about.hash": "നിർമാണ ഹാഷ്:", + "about.hashee": "EE നിർമാണ ഹാഷ്:", + "about.teamEditionLearn": "എന്നതിൽ മറ്റെർമോസ്റ് കമ്മ്യൂണിറ്റിയിൽ ചേരുക ", + "about.teamEditionSt": "നിങ്ങളുടെ എല്ലാ ടീം ആശയവിനിമയങ്ങളും ഒരിടത്ത്, എവിടെനിന്നും തൽക്ഷണം തിരയാനും ഉപയോഗിക്കാനും കഴിയും.", + "about.teamEditiont0": "ടീം പതിപ്പ്", + "about.teamEditiont1": "എന്റർപ്രൈസ് പതിപ്പ്", + "api.channel.add_guest.added": "{addedUsername} ചാനലിലേക്ക് അതിഥിയായി ചേർത്തു {username}.", + "api.channel.add_member.added": "{addedUsername} ചാനലിൽ ചേർത്തു {username}.", + "api.channel.guest_join_channel.post_and_forget": "{username} ചാനലിൽ അതിഥിയായി ചേർന്നു.", + "apps.error": "തെറ്റ്: {error}", + "apps.error.command.field_missing": "ആവശ്യമായ ഫീൽഡുകൾ കാണുന്നില്ല: `{fieldName}`.", + "apps.error.command.unknown_channel": "ഫീൽഡിനായുള്ള അജ്ഞാത ചാനൽ `{fieldName}`: `{option}`.", + "apps.error.command.unknown_option": "ഫീൽഡിനുള്ള അജ്ഞാത ഓപ്ഷൻ `{fieldName}`:`{option}`.", + "apps.error.command.unknown_user": "ഫീൽഡിനായുള്ള അജ്ഞാത ഉപയോക്താവ് `{fieldName}`: `{option}`.", + "apps.error.form.no_form": "`form` നിർവ്വചിച്ചിട്ടില്ല.", + "apps.error.form.refresh": "തിരഞ്ഞെടുത്ത ഫീൽഡുകൾ ലഭ്യമാക്കുന്നതിൽ ഒരു തെറ്റുണ്ടായി. ആപ്പ് ഡെവലപ്പറുമായി ബന്ധപ്പെടുക.വിശദാംശങ്ങൾ: {details}", + "apps.error.form.refresh_no_refresh": "പുതുക്കാത്ത ഫീൽഡിൽ പുതുക്കൽ എന്ന് വിളിക്കുന്നു.", + "apps.error.form.submit.pretext": "മോഡൽ സമർപ്പിക്കുന്നതിൽ ഒരു പിശകുണ്ടായി. ആപ്പ് ഡെവലപ്പറുമായി ബന്ധപ്പെടുക.വിശദാംശങ്ങൾ: {details}", + "apps.error.lookup.error_preparing_request": "ലുക്കപ്പ് അഭ്യർത്ഥന തയ്യാറാക്കുന്നതിൽ തെറ്റ് : {errorMessage}", + "apps.error.malformed_binding": "ഈ ബൈൻഡിങ് ശരിയായി രൂപപ്പെട്ടിട്ടില്ല. ആപ്പ് ഡെവലപ്പറെ ബന്ധപ്പെടുക.", + "apps.error.parser": "പാഴ്സിംഗിലെ തെറ്റ്:{error}", + "apps.error.parser.empty_value": "ശൂന്യമായ മൂല്യങ്ങൾ അനുവദനീയമല്ല", + "apps.error.parser.execute_non_leaf": "നിങ്ങൾ ഒരു സബ്കമാൻഡ് തിരഞ്ഞെടുക്കണം.", + "apps.error.parser.missing_binding": "കമാൻഡ് ബൈൻഡിംഗുകൾ നഷ്‌ടമായി.", + "apps.error.parser.missing_field_value": "ഫീൽഡ് മൂല്യം കാണുന്നില്ല.", + "apps.error.parser.missing_quote": "ഇൻപുട്ട് അവസാനിക്കുന്നതിന് മുമ്പ് പ്രതീക്ഷിക്കുന്ന ഇരട്ട ഉദ്ധരണി പൊരുത്തപ്പെടുന്നു.", + "apps.error.parser.missing_tick": "ഇൻപുട്ട് അവസാനിക്കുന്നതിന് മുമ്പ് പ്രതീക്ഷിക്കുന്ന പൊരുത്തപ്പെടുന്ന ടിക്ക് ഉദ്ധരണി.", + "apps.error.parser.multiple_equal": "അനേക `=` അടയാളങ്ങൾ അനുവദനീയമല്ല.", + "apps.error.parser.no_argument_pos_x": "വാദം തിരിച്ചറിയാൻ കഴിയുന്നില്ല.", + "apps.error.parser.no_bindings": "കമാൻഡ് ബൈൻഡിംഗുകളൊന്നുമില്ല.", + "apps.error.parser.no_match": "`{command}`: ഈ വർക്ക്‌സ്‌പെയ്‌സിൽ പൊരുത്തപ്പെടുന്ന കമാൻഡ് ഒന്നും കണ്ടെത്തിയില്ല.", + "apps.error.parser.no_slash_start": "കമാൻഡ് ആരംഭിക്കേണ്ടത് `/`.", + "apps.error.parser.unexpected_error": "അപ്രതീക്ഷിത തെറ്റ്.", + "apps.error.parser.unexpected_flag": "കമാൻഡ് ഫ്ലാഗ് `{flagName}` സ്വീകരിക്കുന്നില്ല.", + "apps.error.parser.unexpected_state": "എത്തിച്ചേരാനാകുന്നില്ല: മാച്ച് ബൈൻഡിംഗിലെ അപ്രതീക്ഷിത അവസ്ഥ: `{state}`.", + "apps.error.parser.unexpected_whitespace": "എത്തിച്ചേരാനാകാത്തത്: അപ്രതീക്ഷിതമായ ഇടം.", + "apps.error.responses.form.no_form": "പ്രതികരണ തരം `ഫോം` ആണ്, എന്നാൽ പ്രതികരണത്തിൽ ഒരു ഫോമും ഉൾപ്പെടുത്തിയിട്ടില്ല.", + "apps.error.responses.navigate.no_url": "പ്രതികരണ തരം `നാവിഗേറ്റ്` ആണ്, എന്നാൽ പ്രതികരണത്തിൽ url ഒന്നും ഉൾപ്പെടുത്തിയിട്ടില്ല.", + "apps.error.responses.unexpected_error": "ഒരു അപ്രതീക്ഷിത തെറ്റ് ലഭിച്ചു.", + "apps.error.responses.unexpected_type": "ആപ്പ് പ്രതികരണ തരം പ്രതീക്ഷിച്ചിരുന്നില്ല. പ്രതികരണ തരം: {type}.", + "apps.error.responses.unknown_field_error": "ഒരു അജ്ഞാത ഫീൽഡിനായി ഒരു തെറ്റ് ലഭിച്ചു. ഫീൽഡിന്റെ പേര്: `{field}`. തെറ്റ്: `{error}`.", + "apps.error.responses.unknown_type": "ആപ്പ് പ്രതികരണ തരം പിന്തുണയ്ക്കുന്നില്ല. പ്രതികരണ തരം: {type}.", + "apps.error.unknown": "അജ്ഞാത തെറ്റ് സംഭവിച്ചു.", + "apps.suggestion.dynamic.error": "ഡൈനാമിക് തിരഞ്ഞെടുക്കലിലെ തെറ്റ്", + "apps.suggestion.errors.parser_error": "പാർസിങ്ങിലെ തെറ്റ്", + "apps.suggestion.no_dynamic": "ഡൈനാമിക് നിർദ്ദേശങ്ങൾക്കായി ഡാറ്റയൊന്നും നൽകിയിട്ടില്ല", + "apps.suggestion.no_static": "പൊരുത്തപ്പെടുന്ന ഓപ്ഷനുകളൊന്നുമില്ല.", + "apps.suggestion.no_suggestion": "പൊരുത്തപ്പെടുന്ന നിർദ്ദേശങ്ങളൊന്നുമില്ല.", + "archivedChannelMessage": "നിങ്ങൾ **ആർക്കൈവ് ചെയ്‌ത ചാനൽ** കാണുന്നു. പുതിയ സന്ദേശങ്ങൾ പോസ്റ്റ് ചെയ്യാൻ കഴിയില്ല.", + "camera_type.photo.option": "ഫോട്ടോ എടുക്കുക", + "camera_type.video.option": "വീഡിയോ റെക്കോർഡ് ചെയ്യുക", + "center_panel.archived.closeChannel": "ചാനൽ അവസാനിപ്പിക്കുക", + "channel_header.directchannel.you": "{displayname} (നിങ്ങൾ) ", + "channel_info.header": "തലക്കെട്ട്:", + "channel_loader.someone": "ആരോ", + "channel_modal.descriptionHelp": "ഈ ചാനൽ എങ്ങനെ ഉപയോഗിക്കണമെന്ന് വിവരിക്കുക.", + "channel_modal.header": "തലക്കെട്ട്", + "channel_modal.headerEx": "ഉദാ: \"[ലിങ്ക് ശീർഷകം](http://example.com)\"", + "channel_modal.headerHelp": "ചാനലിന്റെ പേരിന് അരികിൽ ചാനലിന്റെ തലക്കെട്ടിൽ ദൃശ്യമാകുന്ന വാചകം സജ്ജീകരിക്കുക. ഉദാഹരണത്തിന്, [ലിങ്ക് ശീർഷകം](http://example.com) എന്ന് ടൈപ്പ് ചെയ്തുകൊണ്ട് പതിവായി ഉപയോഗിക്കുന്ന ലിങ്കുകൾ ഉൾപ്പെടുത്തുക.", + "channel_modal.name": "പേര്", + "channel_modal.nameEx": "ഉദാ: \"ബഗ്ഗുകൾ\", \"മാർക്കറ്റിംഗ്\", \"客户支持\"", + "channel_modal.optional": "(ഓപ്ഷണൽ)", + "channel_modal.purpose": "ഉദ്ദേശ്യം", + "channel_modal.purposeEx": "ഉദാ: \"ബഗുകളും മെച്ചപ്പെടുത്തലുകളും ഫയൽ ചെയ്യാനുള്ള ഒരു ചാനൽ\"", + "combined_system_message.added_to_channel.many_expanded": "{users}, {lastUser} എന്നിവരെ **ചാനലിലേക്ക്** ചേർത്തത് {actor} ആണ്.", + "combined_system_message.added_to_channel.one": "{firstUser} **ചാനലിൽ ചേർത്തത്** {actor}.", + "combined_system_message.added_to_channel.one_you": "നിങ്ങളെ **ചാനലിലേക്ക് ചേർത്തത്** {actor} ആണ്.", + "combined_system_message.added_to_channel.two": "{firstUser}, {secondUser} എന്നിവ **ചാനലിലേക്ക് ചേർത്തത്** {actor}.", + "combined_system_message.added_to_team.many_expanded": "{users}, {lastUser} എന്നിവരെ **ടീമിലേക്ക് ചേർത്തത്** {actor} ആണ്.", + "combined_system_message.added_to_team.one": "{firstUser} **ടീമിലേക്ക് ചേർത്തത്** {actor}.", + "combined_system_message.added_to_team.one_you": "നിങ്ങളെ ടീമിലേക്ക് ** ചേർത്തത് {actor} ആണ്.", + "combined_system_message.added_to_team.two": "{firstUser}, {secondUser} എന്നിവരെ **ടീമിലേക്ക് ചേർത്തു** {actor}.", + "combined_system_message.joined_channel.many_expanded": "{users}, {lastUser} എന്നിവർ **ചാനലിൽ** ചേർന്നു.", + "combined_system_message.joined_channel.one": "{firstUser} **ചാനലിൽ** ചേർന്നു.", + "combined_system_message.joined_channel.one_you": "നിങ്ങൾ **ചാനലിൽ** ചേർന്നു.", + "combined_system_message.joined_channel.two": "{firstUser}, {secondUser} എന്നിവർ **ചാനലിൽ** ചേർന്നു.", + "combined_system_message.joined_team.many_expanded": "{users}, {lastUser} എന്നിവർ **ടീമിൽ** ചേർന്നു.", + "combined_system_message.joined_team.one": "{firstUser} **ടീമിൽ** ചേർന്നു.", + "combined_system_message.joined_team.one_you": "നിങ്ങൾ **ടീമിൽ ചേർന്നു**.", + "combined_system_message.joined_team.two": "{firstUser}, {secondUser} എന്നിവർ **ടീമിൽ ചേർന്നു**.", + "combined_system_message.left_channel.many_expanded": "{users} കൂടാതെ {lastUser} **ചാനൽ വിട്ടു**.", + "combined_system_message.left_channel.one": "{firstUser} **ചാനൽ വിട്ടു**.", + "combined_system_message.left_channel.one_you": "നിങ്ങൾ **ചാനൽ വിട്ടു**.", + "combined_system_message.left_channel.two": "{firstUser}, {secondUser} എന്നിവർ **ചാനൽ വിട്ടു**.", + "combined_system_message.left_team.many_expanded": "{users} കൂടാതെ {lastUser} **ടീം വിട്ടു**.", + "combined_system_message.left_team.one": "{firstUser} **ടീം വിട്ടു**.", + "combined_system_message.left_team.one_you": "നിങ്ങൾ **ടീം വിട്ടു**.", + "combined_system_message.left_team.two": "{firstUser}, {secondUser} എന്നിവർ **ടീം വിട്ടു**.", + "combined_system_message.removed_from_channel.many_expanded": "{users}, {lastUser} എന്നിവരെ **ചാനലിൽ നിന്ന് **നീക്കം ചെയ്തു.", + "combined_system_message.removed_from_channel.one": "{firstUser} **ചാനലിൽ നിന്ന് നീക്കം ചെയ്യപ്പെട്ടു**.", + "combined_system_message.removed_from_channel.one_you": "നിങ്ങളെ **ചാനലിൽ നിന്ന് നീക്കം ചെയ്തു**.", + "combined_system_message.removed_from_channel.two": "{firstUser}, {secondUser} എന്നിവരെ **ചാനലിൽ നിന്ന് നീക്കം ചെയ്തു**.", + "combined_system_message.removed_from_team.many_expanded": "{users}, {lastUser} എന്നിവരെ **ടീമിൽ നിന്ന് നീക്കം ചെയ്തു**.", + "combined_system_message.removed_from_team.one": "{firstUser} **ടീമിൽ നിന്ന് നീക്കം ചെയ്യപ്പെട്ടു**.", + "combined_system_message.removed_from_team.one_you": "നിങ്ങളെ **ടീമിൽ നിന്ന് നീക്കം ചെയ്‌തു**.", + "combined_system_message.removed_from_team.two": "{firstUser}, {secondUser} എന്നിവരെ **ടീമിൽ നിന്ന് നീക്കം ചെയ്തു**.", + "combined_system_message.you": "നിങ്ങൾ", + "create_post.deactivated": "നിർജ്ജീവമാക്കിയ ഒരു ഉപയോക്താവിനൊപ്പം ആർക്കൈവ് ചെയ്ത ചാനൽ നിങ്ങൾ കാണുന്നു.", + "create_post.write": "{channelDisplayName}-ലേക്ക് എഴുതുക", + "custom_status.expiry.until": "വരുവോളം", + "custom_status.expiry_dropdown.custom": "ഇഷ്ടാനുസൃതം", + "custom_status.expiry_dropdown.date_and_time": "തീയതിയും സമയവും", + "custom_status.expiry_dropdown.dont_clear": "വ്യക്തമാക്കരുത്", + "custom_status.expiry_dropdown.four_hours": "4 മണിക്കൂർ", + "custom_status.expiry_dropdown.one_hour": "1 മണിക്കൂർ", + "custom_status.expiry_dropdown.thirty_minutes": "30 മിനിറ്റ്", + "custom_status.expiry_dropdown.this_week": "ഈ ആഴ്ച", + "custom_status.expiry_dropdown.today": "ഇന്ന്", + "custom_status.expiry_time.today": "ഇന്ന്", + "custom_status.expiry_time.tomorrow": "നാളെ", + "custom_status.failure_message": "സ്റ്റാറ്റസ് അപ്ഡേറ്റ് ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക", + "custom_status.set_status": "ഒരു സ്റ്റാറ്റസ് സജ്ജമാക്കുക", + "custom_status.suggestions.in_a_meeting": "ഒരു മീറ്റിംഗിൽ", + "custom_status.suggestions.on_a_vacation": "ഒരു അവധിക്കാലത്ത്", + "custom_status.suggestions.out_for_lunch": "ഉച്ചഭക്ഷണത്തിന് പുറത്ത്", + "custom_status.suggestions.out_sick": "അസുഖമായി പുറത്ത്", + "custom_status.suggestions.recent_title": "സമീപകാല", + "custom_status.suggestions.title": "നിർദ്ദേശങ്ങൾ", + "custom_status.suggestions.working_from_home": "വീട്ടിൽ നിന്ന് ജോലി ചെയ്യുന്നു", + "date_separator.today": "ഇന്ന്", + "date_separator.yesterday": "ഇന്നലെ", + "edit_post.editPost": "പോസ്റ്റ് എഡിറ്റ് ചെയ്യുക...", + "edit_post.save": "സേവ്", + "emoji_picker.activities": "പ്രവർത്തനങ്ങൾ", + "emoji_picker.animals-nature": "മൃഗങ്ങളും പ്രകൃതിയും", + "emoji_picker.custom": "ഇഷ്ടാനുസൃതം", + "emoji_picker.flags": "ഫ്ലാഗുകൾ", + "emoji_picker.food-drink": "ഭക്ഷണവും പാനീയവും", + "emoji_picker.objects": "വസ്തുക്കൾ", + "emoji_picker.people-body": "ആളുകളും ശരീരവും", + "emoji_picker.recent": "അടുത്തിടെ", + "emoji_picker.searchResults": "തിരയൽ ഫലങ്ങൾ", + "emoji_picker.smileys-emotion": "സ്മൈലികളും ഇമോഷനും", + "emoji_picker.symbols": "ചിഹ്നങ്ങൾ", + "emoji_picker.travel-places": "യാത്രയും സ്ഥലങ്ങളും", + "emoji_skin.dark_skin_tone": "ഇരുണ്ട ചർമ്മ നിറം", + "emoji_skin.default": "ഡിഫോൾട്ട് സ്കിൻ ടോൺ", + "emoji_skin.light_skin_tone": "നേരിയ തൊലി നിറം", + "emoji_skin.medium_dark_skin_tone": "ഇടത്തരം ഇരുണ്ട ചർമ്മ നിറം", + "emoji_skin.medium_light_skin_tone": "ഇടത്തരം ഇളം ചർമ്മ നിറം", + "emoji_skin.medium_skin_tone": "ഇടത്തരം ചർമ്മ നിറം", + "file_upload.fileAbove": "ഫയലുകൾ {max}-ൽ കുറവായിരിക്കണം", + "friendly_date.daysAgo": "{count} {count, plural, ഒരു {day} മറ്റ് {days}} മുമ്പ്", + "friendly_date.hoursAgo": "{count} {count, plural, ഒരു {hour} മറ്റ് {hours}} മുമ്പ്", + "friendly_date.minsAgo": "{count} {count, plural, ഒന്ന് {min} മറ്റൊന്ന് {mins}} മുമ്പ്", + "friendly_date.monthsAgo": "{count} {count, plural, ഒരു {month} മറ്റ് {months}} മുമ്പ്", + "friendly_date.now": "ഇപ്പോൾ", + "friendly_date.yearsAgo": "{count} {count, plural, ഒരു {വർഷം} മറ്റ് {വർഷം}} മുമ്പ്", + "friendly_date.yesterday": "ഇന്നലെ", + "gallery.footer.channel_name": "{channelName}-ൽ പങ്കിട്ടു", + "gallery.open_file": "ഫയൽ തുറക്കുക", + "get_post_link_modal.title": "ലിങ്ക് പകർത്തുക", + "global_threads.allThreads": "നിങ്ങളുടെ എല്ലാ ത്രെഡുകളും", + "global_threads.emptyThreads.message": "നിങ്ങൾ പരാമർശിച്ചതോ പങ്കെടുത്തതോ ആയ എല്ലാ ത്രെഡുകളും നിങ്ങൾ പിന്തുടരുന്ന ത്രെഡുകൾക്കൊപ്പം ഇവിടെ കാണിക്കും.", + "global_threads.emptyThreads.title": "ഇതുവരെ പിന്തുടരുന്ന ത്രെഡുകളൊന്നുമില്ല", + "global_threads.emptyUnreads.title": "വായിക്കാത്ത ത്രെഡുകളൊന്നുമില്ല", + "global_threads.markAllRead.cancel": "റദ്ദാക്കുക", + "global_threads.markAllRead.markRead": "വായിച്ചതായി അടയാളപ്പെടുത്തുക", + "global_threads.markAllRead.message": "ഇവിടെ കാണിച്ചിരിക്കുന്ന നിങ്ങളുടെ എല്ലാ ത്രെഡുകൾക്കുമായി ഇത് വായിക്കാത്ത സ്റ്റാറ്റസ് മായ്‌ക്കും", + "global_threads.markAllRead.title": "എല്ലാ ത്രെഡുകളും വായിച്ചതായി അടയാളപ്പെടുത്തണമെന്ന് തീർച്ചയാണോ?", + "global_threads.options.mark_as_read": "വായിച്ചതായി അടയാളപ്പെടുത്തുക", + "global_threads.options.open_in_channel": "ചാനലിൽ തുറക്കുക", + "global_threads.options.title": "ത്രെഡ് പ്രവർത്തനങ്ങൾ", + "global_threads.unreads": "വായിക്കാത്തവ", + "last_users_message.added_to_channel.type": "**ചാനലിൽ ചേർക്കുന്നത്** {actor} ആണ്.", + "last_users_message.added_to_team.type": "{actor} ആണ് **ടീമിലേക്ക് ചേർത്തത്**.", + "last_users_message.first": "{firstUser} ഒപ്പം ", + "last_users_message.joined_channel.type": "**ചാനലിൽ ചേർന്നു**.", + "last_users_message.joined_team.type": "**ടീമിൽ ചേർന്നു**.", + "last_users_message.left_channel.type": "**ചാനൽ വിട്ടു**.", + "last_users_message.left_team.type": "**ടീം വിട്ടു**.", + "last_users_message.others": "മറ്റ് {numOthers} ", + "last_users_message.removed_from_channel.type": "**ചാനലിൽ നിന്ന് നീക്കപ്പെട്ടു**.", + "last_users_message.removed_from_team.type": "**ടീമിൽ നിന്ന് നീക്കം ചെയ്യപ്പെട്ടു**.", + "login.email": "ഇമെയിൽ", + "login.forgot": "ഞാൻ എന്റെ പാസ്സ്‌വേർഡ് മറന്നു", + "login.ldapUsername": "AD/LDAP ഉപയോക്തൃനാമം", + "login.or": "അഥവാ", + "login.password": "പാസ്സ്‌വേർഡ്", + "login.signIn": "സൈൻ ഇൻ", + "login.username": "ഉപയോക്തൃനാമം", + "login_mfa.enterToken": "സൈൻ ഇൻ പ്രോസസ്സ് പൂർത്തിയാക്കാൻ, നിങ്ങളുടെ സ്മാർട്ട്ഫോണിന്റെ ഓതന്റിക്കേറ്ററിൽ നിന്ന് ഒരു ടോക്കൺ നൽകുക", + "login_mfa.token": "MFA ടോക്കൺ", + "login_mfa.tokenReq": "ദയവായി ഒരു MFA ടോക്കൺ നൽകുക", + "mobile.about.appVersion": "ആപ്പ് പതിപ്പ്: {version} (Build {number})", + "mobile.account.settings.save": "സേവ്", + "mobile.action_menu.select": "ഒരു ഓപ്ഷൻ തിരഞ്ഞെടുക്കുക", + "mobile.android.back_handler_exit": "പുറത്തുകടക്കാൻ വീണ്ടും അമർത്തുക", + "mobile.android.photos_permission_denied_description": "നിങ്ങളുടെ മാറ്റർമോസ്റ്റ് ഇൻസ്‌റ്റൻസിലേക്ക് ഫോട്ടോകൾ അപ്‌ലോഡ് ചെയ്യുക അല്ലെങ്കിൽ അവ നിങ്ങളുടെ ഉപകരണത്തിൽ സംരക്ഷിക്കുക. നിങ്ങളുടെ ഫോട്ടോ ലൈബ്രറിയിലേക്ക് Mattermost Read and Write ആക്‌സസ് അനുവദിക്കുന്നതിന് ക്രമീകരണം തുറക്കുക.", + "mobile.android.photos_permission_denied_title": "{applicationName} നിങ്ങളുടെ ഫോട്ടോകൾ ആക്സസ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നു", + "mobile.announcement_banner.title": "പ്രഖ്യാപനം", + "mobile.camera_photo_permission_denied_description": "ഫോട്ടോകൾ എടുത്ത് അവ നിങ്ങളുടെ മാറ്റർമോസ്‌റ്റിലേക്ക് അപ്‌ലോഡ് ചെയ്യുക അല്ലെങ്കിൽ നിങ്ങളുടെ ഉപകരണത്തിൽ സംരക്ഷിക്കുക. നിങ്ങളുടെ ക്യാമറയിലേക്ക് Mattermost Read and Write ആക്‌സസ് അനുവദിക്കുന്നതിന് ക്രമീകരണം തുറക്കുക.", + "mobile.camera_photo_permission_denied_title": "{applicationName} നിങ്ങളുടെ ക്യാമറ ആക്സസ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നു", + "mobile.channel_info.alertNo": "അല്ല", + "mobile.channel_info.alertYes": "അതെ", + "mobile.channel_list.unreads": "വായിക്കാത്തവ", + "mobile.commands.error_title": "കമാൻഡ് നടപ്പിലാക്കുന്നതിൽ തെറ്റ്", + "mobile.components.select_server_view.connect": "ബന്ധിപ്പിക്കുക", + "mobile.components.select_server_view.connecting": "ബന്ധിപ്പിക്കുന്നു...", + "mobile.components.select_server_view.enterServerUrl": "സെർവർ URL നൽകുക", + "mobile.components.select_server_view.proceed": "തുടരുക", + "mobile.create_channel": "സൃഷ്ടിക്കാൻ", + "mobile.create_post.read_only": "ഈ ചാനൽ വായിക്കാൻ മാത്രമുള്ളതാണ്", + "mobile.custom_list.no_results": "ഫലങ്ങളൊന്നുമില്ല", + "mobile.custom_status.choose_emoji": "ഒരു ഇമോജി തിരഞ്ഞെടുക്കുക", + "mobile.custom_status.clear_after": "ശേഷം മായ്ക്കുക", + "mobile.custom_status.modal_confirm": "ചെയ്തു", + "mobile.display_settings.theme": "തീം", + "mobile.document_preview.failed_description": "പ്രമാണം തുറക്കുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു. നിങ്ങൾക്ക് ഒരു {fileType} വ്യൂവർ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കി വീണ്ടും ശ്രമിക്കുക.\n", + "mobile.document_preview.failed_title": "ഓപ്പൺ ഡോക്യുമെന്റ് പരാജയപ്പെട്ടു", + "mobile.downloader.disabled_description": "ഈ സെർവറിൽ ഫയൽ ഡൗൺലോഡുകൾ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു. കൂടുതൽ വിവരങ്ങൾക്ക് നിങ്ങളുടെ സിസ്റ്റം അഡ്‌മിനെ ബന്ധപ്പെടുക.\n", + "mobile.downloader.disabled_title": "ഡൗൺലോഡ് പ്രവർത്തനരഹിതമാക്കി", + "mobile.downloader.failed_description": "ഫയൽ ഡൗൺലോഡ് ചെയ്യുമ്പോൾ ഒരു തെറ്റ് സംഭവിച്ചു. നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.\n", + "mobile.downloader.failed_title": "ഡൗൺലോഡ് പരാജയപ്പെട്ടു", + "mobile.edit_channel": "സേവ്", + "mobile.edit_post.title": "സന്ദേശം എഡിറ്റുചെയ്യുന്നു", + "mobile.error_handler.button": "വീണ്ടും സമാരംഭിക്കുക", + "mobile.error_handler.description": "\nആപ്പ് വീണ്ടും തുറക്കാൻ റീലോഞ്ച് ടാപ്പ് ചെയ്യുക. പുനരാരംഭിച്ച ശേഷം, നിങ്ങൾക്ക് ക്രമീകരണ മെനുവിൽ നിന്ന് പ്രശ്നം റിപ്പോർട്ടുചെയ്യാനാകും.\n", + "mobile.error_handler.title": "അപ്രതീക്ഷിത തെറ്റ് സംഭവിച്ചു", + "mobile.file_upload.disabled2": "മൊബൈലിൽ നിന്നുള്ള ഫയൽ അപ്‌ലോഡുകൾ പ്രവർത്തനരഹിതമാക്കി.", + "mobile.file_upload.max_warning": "അപ്‌ലോഡുകൾ പരമാവധി {count} ഫയലുകളായി പരിമിതപ്പെടുത്തിയിരിക്കുന്നു.", + "mobile.files_paste.error_description": "ഫയൽ(കൾ) ഒട്ടിക്കുമ്പോൾ ഒരു തെറ്റ് സംഭവിച്ചു. ദയവായി വീണ്ടും ശ്രമിക്കുക.", + "mobile.files_paste.error_dismiss": "പിരിച്ചുവിടുക", + "mobile.files_paste.error_title": "ഒട്ടിക്കാനായില്ല", + "mobile.gallery.title": "{total}-ന്റെ {index}", + "mobile.ios.photos_permission_denied_description": "ഫോട്ടോകളും വീഡിയോകളും നിങ്ങളുടെ മാറ്റർമോസ്റ്റ് ഇൻസ്‌റ്റൻസിലേക്ക് അപ്‌ലോഡ് ചെയ്യുക അല്ലെങ്കിൽ അവ നിങ്ങളുടെ ഉപകരണത്തിൽ സംരക്ഷിക്കുക. നിങ്ങളുടെ ഫോട്ടോ, വീഡിയോ ലൈബ്രറിയിലേക്ക് മാറ്റർമോസ്റ്റ് റീഡും റൈറ്റും ആക്‌സസ് അനുവദിക്കുന്നതിന് ക്രമീകരണം തുറക്കുക.", + "mobile.ios.photos_permission_denied_title": "{applicationName} നിങ്ങളുടെ ഫോട്ടോകൾ ആക്സസ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നു", + "mobile.join_channel.error": "ഞങ്ങൾക്ക് {displayName} ചാനലിൽ ചേരാനായില്ല. ദയവായി നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.", + "mobile.link.error.text": "ലിങ്ക് തുറക്കാനായില്ല.", + "mobile.link.error.title": "തെറ്റ്", + "mobile.managed.exit": "പുറത്ത്", + "mobile.managed.jailbreak": "ജയിൽ തകർന്ന ഉപകരണങ്ങളെ {vendor} വിശ്വസിക്കുന്നില്ല, ദയവായി ആപ്പിൽ നിന്ന് പുറത്തുകടക്കുക.", + "mobile.managed.not_secured.android": "Mattermost ഉപയോഗിക്കുന്നതിന് ഈ ഉപകരണം ഒരു സ്‌ക്രീൻ ലോക്ക് ഉപയോഗിച്ച് സുരക്ഷിതമാക്കിയിരിക്കണം.", + "mobile.managed.not_secured.ios": "Mattermost ഉപയോഗിക്കുന്നതിന് ഈ ഉപകരണം ഒരു പാസ്‌കോഡ് ഉപയോഗിച്ച് സുരക്ഷിതമാക്കിയിരിക്കണം.\n\nക്രമീകരണം > ഫേസ് ഐഡിയും പാസ്‌കോഡും എന്നതിലേക്ക് പോകുക.", + "mobile.managed.not_secured.ios.touchId": "Mattermost ഉപയോഗിക്കുന്നതിന് ഈ ഉപകരണം ഒരു പാസ്‌കോഡ് ഉപയോഗിച്ച് സുരക്ഷിതമാക്കിയിരിക്കണം.\n\nക്രമീകരണം > ടച്ച് ഐഡിയും പാസ്‌കോഡും എന്നതിലേക്ക് പോകുക.", + "mobile.managed.secured_by": "{vendor} സുരക്ഷിതമാക്കിയത്", + "mobile.managed.settings": "ക്രമീകരണങ്ങളിലേക്ക് പോകുക", + "mobile.markdown.code.copy_code": "കോഡ് പകർത്തുക", + "mobile.markdown.code.plusMoreLines": "+{count, number} കൂടുതൽ {count, plural, one {line} other {lines}}", + "mobile.markdown.image.too_large": "ചിത്രം {maxWidth} എന്നതിന്റെ പരമാവധി അളവുകൾ {maxHeight} കവിയുന്നു:", + "mobile.markdown.link.copy_url": "URL പകർത്തുക", + "mobile.mention.copy_mention": "പരാമർശം കോപ്പി ചെയുക", + "mobile.message_length.message": "നിങ്ങളുടെ നിലവിലെ സന്ദേശം ദൈർഘ്യമേറിയതാണ്. നിലവിലെ അക്ഷരങ്ങളുടെ എണ്ണം: {count}/{max}", + "mobile.message_length.message_split_left": "സന്ദേശത്തിന്റെ അക്ഷര പരിധി കവിയുന്നു", + "mobile.message_length.title": "സന്ദേശ ദൈർഘ്യം", + "mobile.oauth.try_again": "വീണ്ടും ശ്രമിക്കുക", + "mobile.open_dm.error": "ഞങ്ങൾക്ക് {displayName} ഉപയോഗിച്ച് നേരിട്ടുള്ള സന്ദേശം തുറക്കാനായില്ല. ദയവായി നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.", + "mobile.open_gm.error": "ആ ഉപയോക്താക്കളുമായി ഒരു ഗ്രൂപ്പ് സന്ദേശം തുറക്കാൻ ഞങ്ങൾക്ക് കഴിഞ്ഞില്ല. ദയവായി നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.", + "mobile.participants.header": "ത്രെഡ് പങ്കാളികൾ", + "mobile.permission_denied_dismiss": "അനുവദിക്കരുത്", + "mobile.permission_denied_retry": "ക്രമീകരണങ്ങൾ", + "mobile.post.delete_question": "ഈ പോസ്റ്റ് ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ?", + "mobile.post.delete_title": "പോസ്റ്റ് ഇല്ലാതാക്കുക", + "mobile.post.failed_delete": "സന്ദേശം ഇല്ലാതാക്കുക", + "mobile.post.failed_retry": "വീണ്ടും ശ്രമിക്കുക", + "mobile.post_info.add_reaction": "പ്രതികരണം ചേർക്കുക", + "mobile.post_info.copy_text": "വാചകം പകർത്തുക", + "mobile.post_info.pin": "ചാനലിലേക്ക് പിൻ ചെയ്യുക", + "mobile.post_info.reply": "മറുപടി", + "mobile.post_textbox.entire_channel.confirm": "സ്ഥിരീകരിക്കുക", + "mobile.post_textbox.entire_channel.title": "മുഴുവൻ ചാനലിലേക്കും അറിയിപ്പുകൾ അയയ്ക്കുന്നത് സ്ഥിരീകരിക്കുക", + "mobile.post_textbox.groups.title": "ഗ്രൂപ്പുകളിലേക്ക് അറിയിപ്പുകൾ അയയ്ക്കുന്നത് സ്ഥിരീകരിക്കുക", + "mobile.privacy_link": "സ്വകാര്യതാനയം", + "mobile.push_notification_reply.button": "അയക്കുക", + "mobile.push_notification_reply.placeholder": "മറുപടി എഴുതൂ...", + "mobile.push_notification_reply.title": "മറുപടി", + "mobile.rename_channel.display_name_required": "ചാനലിന്റെ പേര് ആവശ്യമാണ്", + "password_send.description": "നിങ്ങളുടെ പാസ്‌വേഡ് പുനഃസജ്ജമാക്കാൻ, നിങ്ങൾ സൈൻ അപ്പ് ചെയ്യാൻ ഉപയോഗിച്ച ഇമെയിൽ വിലാസം നൽകുക", + "password_send.error": "ശരിയായ ഒരു ഇമെയിൽ വിലാസം നൽകുക.", + "password_send.link": "അക്കൗണ്ട് നിലവിലുണ്ടെങ്കിൽ, ഒരു പാസ്‌വേഡ് റീസെറ്റ് ഇമെയിൽ ഇതിലേക്ക് അയയ്‌ക്കും:", + "permalink.show_dialog_warn.description": "ചാനൽ അഡ്‌മിൻ വ്യക്തമായി ചേർക്കാതെ തന്നെ നിങ്ങൾ \"{channel}\"-ൽ ചേരാൻ പോകുകയാണ്. ഈ സ്വകാര്യ ചാനലിൽ ചേരണമെന്ന് തീർച്ചയാണോ?", + "permalink.show_dialog_warn.join": "ചേരുക", + "permalink.show_dialog_warn.title": "സ്വകാര്യ ചാനലിൽ ചേരുക", + "post_body.check_for_out_of_channel_groups_mentions.message": "അവർ ചാനലിൽ ഇല്ലാത്തതിനാൽ ഈ പരാമർശം അറിയിപ്പ് ലഭിച്ചില്ല. ഈ ചാനലുമായി ലിങ്ക് ചെയ്‌തിരിക്കുന്ന ഗ്രൂപ്പുകളിൽ അവരും അംഗമല്ല.", + "post_body.check_for_out_of_channel_mentions.link.private": "അവരെ ഈ സ്വകാര്യ ചാനലിൽ ചേർക്കുക", + "post_body.check_for_out_of_channel_mentions.link.public": "അവരെ ചാനലിൽ ചേർക്കുക", + "post_body.check_for_out_of_channel_mentions.message.multiple": "പരാമർശിച്ചെങ്കിലും അവ ചാനലിലില്ല. ഇഷ്ടമുണ്ടോ ", + "post_body.check_for_out_of_channel_mentions.message.one": "പരാമർശിച്ചെങ്കിലും ചാനലിൽ ഇല്ല. ഇഷ്ടമുണ്ടോ ", + "post_body.check_for_out_of_channel_mentions.message_last": "? അവർക്ക് എല്ലാ സന്ദേശ ചരിത്രത്തിലേക്കും ആക്സസ് ഉണ്ടായിരിക്കും.", + "post_body.commentedOn": "{name}{apostrophe} സന്ദേശത്തിൽ അഭിപ്രായമിട്ടു: ", + "post_info.del": "ഇല്ലാതാക്കുക", + "post_info.edit": "എഡിറ്റ് ചെയ്യുക", + "posts_view.newMsg": "പുതിയ സന്ദേശങ്ങൾ", + "search_bar.search": "തിരയുക", + "user.settings.general.email": "ഇമെയിൽ", + "user.settings.general.field_handled_externally": "നിങ്ങളുടെ ലോഗിൻ പ്രൊവൈഡർ വഴിയാണ് ഈ ഫീൽഡ് കൈകാര്യം ചെയ്യുന്നത്. നിങ്ങൾക്ക് ഇത് മാറ്റണമെങ്കിൽ, നിങ്ങളുടെ ലോഗിൻ പ്രൊവൈഡർ വഴി അത് മാറ്റേണ്ടതുണ്ട്.", + "user.settings.general.username": "ഉപയോക്തൃനാമം" } diff --git a/assets/base/i18n/nb_NO.json b/assets/base/i18n/nb_NO.json index f0d8edd271a..11de4292f8e 100644 --- a/assets/base/i18n/nb_NO.json +++ b/assets/base/i18n/nb_NO.json @@ -1,32 +1,1152 @@ { - "mobile.server_url.invalid_format": "http:// аль эсвэл https:// гэж эхлэх ёстой", - "channel_modal.name": "Нэр", - "about.teamEditiont0": "Team-versjon", - "about.teamEditionSt": "All kommunikasjon i teamet på ett sted, søkbart og tilgjengelig fra hvor som helst.", - "about.teamEditionLearn": "Bli med å bidra til Mattermost på ", - "about.hashee": "Hash for EE-bygget:", - "about.hash": "Hash for dette bygget:", - "about.enterpriseEditionSt": "Харилцаа холбооны орчин үеийн шийдлийг хувийн сервер үүсгэн зохион байгуулаарай.", - "about.enterpriseEditionLearn": "Du kan lese mer om enterprise-versjonen på ", - "about.date": "Bygget:", - "apps.error.parser.missing_field_value": "Felt-verdi mangler.", - "apps.error.parser.empty_value": "tomme verdier er ikke akseptert", - "apps.error.form.no_form": "`skjema` er ikke er definert.", - "apps.error.command.unknown_user": "Ukjent bruker for felt `{fieldName}`: `{option}`.", - "apps.error.command.unknown_option": "Ukjent verdi for feltet `{fieldName}`: `{option}`.", - "apps.error.command.unknown_channel": "ukjent kanal for felt `{fieldName}`: `{option}`.", - "apps.error.command.field_missing": "Påkrevd område mangler: `{fieldName}`.", - "apps.error": "Feil", - "api.channel.add_member.added": "{addedUsername} lagt til kanal av {username}.", - "about.teamEditiont1": "Enterprise-versjon", - "about.enterpriseEditione1": "Enterprise-versjon", - "api.channel.guest_join_channel.post_and_forget": "{username} ble med som gjest i kanalen.", - "api.channel.add_guest.added": "{addedUsername} ble lagt til som gjest i kanalen av {username}.", - "apps.error.parser.multiple_equal": "Flere `=`tegn er ikke tillatt.", - "apps.error.parser.execute_non_leaf": "Du må velge en underkommando.", - "apps.error.form.refresh": "Det oppsto en feil ved henting av de valgte feltene. Kontakt applikasjonsutvikleren. Detaljer: {details}", - "apps.error.form.no_source": "`kilde` er ikke definert.", - "apps.error.form.no_lookup": "`oppslag` er ikke definert.", - "apps.error.parser.no_form": "Ingen skjema funnet.", - "apps.error.parser.no_argument_pos_x": "Ikke mulig å identifisere argumentet." + "about.date": "Bygget:", + "about.enterpriseEditionLearn": "Du kan lese mer om enterprise-versjonen på ", + "about.enterpriseEditionSt": "Moderne kommunikasjon bak brannmuren din.", + "about.enterpriseEditione1": "Enterprise versjon", + "about.hash": "Hash for dette bygget:", + "about.hashee": "Hash for EE-bygget:", + "about.teamEditionLearn": "Bli med å bidra til Mattermost på", + "about.teamEditionSt": "All kommunikasjon i teamet på ett sted, søkbart og tilgjengelig fra hvor som helst.", + "about.teamEditiont0": "Team versjon", + "about.teamEditiont1": "Enterprise versjon", + "account.logout": "Logg ut", + "account.logout_from": "Logg ut av {serverName}", + "account.settings": "Valg", + "account.your_profile": "Din profil", + "alert.channel_deleted.description": "Kanalen {displayName} er arkivert.", + "alert.channel_deleted.title": "Arkivert kanal", + "alert.push_proxy.button": "Ok", + "alert.push_proxy_error.description": "På grunn av konfigurasjonen av denne serveren kan ikke varsler mottas i mobilappen. Kontakt systemadministratoren for mer informasjon.", + "alert.push_proxy_error.title": "Varsler kan ikke mottas fra denne serveren", + "alert.push_proxy_unknown.description": "Denne serveren kunne ikke motta push-varsler av en ukjent årsak. Det vil bli forsøkt igjen neste gang du kobler til.", + "alert.push_proxy_unknown.title": "Varsler kunne ikke mottas fra denne serveren", + "alert.removed_from_channel.description": "Du har blitt fjernet fra kanalen {displayName}.", + "alert.removed_from_channel.title": "Fjernet fra kanalen", + "alert.removed_from_team.description": "Du har blitt fjernet fra teamet {displayName}.", + "alert.removed_from_team.title": "Fjernet fra team", + "announcment_banner.dismiss": "Avvis kunngjøringen", + "announcment_banner.okay": "Ok", + "api.channel.add_guest.added": "{addedUsername} ble lagt til som gjest i kanalen av {username}.", + "api.channel.add_member.added": "{addedUsername} lagt til kanal av {username}.", + "api.channel.guest_join_channel.post_and_forget": "{username} ble med som gjest i kanalen.", + "apps.error": "Feil: {error}", + "apps.error.command.field_missing": "Påkrevd område mangler: `{fieldName}`.", + "apps.error.command.same_channel": "Kanal gjentatt for feltet `{fieldName}`: `{option}`.", + "apps.error.command.same_option": "Alternativet gjentatt for feltet `{fieldName}`: `{option}`.", + "apps.error.command.same_user": "Bruker gjentatt for feltet `{fieldName}`: `{option}`.", + "apps.error.command.unknown_channel": "Ukjent kanal for felt `{fieldName}`: `{option}`.", + "apps.error.command.unknown_option": "Ukjent verdi for feltet `{fieldName}`: `{option}`.", + "apps.error.command.unknown_user": "Ukjent bruker for felt `{fieldName}`: `{option}`.", + "apps.error.form.no_form": "`skjema` er ikke er definert.", + "apps.error.form.no_lookup": "`oppslag` er ikke definert.", + "apps.error.form.no_source": "`kilde` er ikke definert.", + "apps.error.form.no_submit": "'send' er ikke definert", + "apps.error.form.refresh": "Det oppsto en feil ved henting av de valgte feltene. Kontakt applikasjonsutvikleren. Detaljer: {details}", + "apps.error.form.refresh_no_refresh": "Kalt oppdatering på ingen oppdateringsfelt.", + "apps.error.form.submit.pretext": "Det har oppstått en feil ved innsending av modalen. Kontakt apputvikleren. Detaljer: {details}", + "apps.error.lookup.error_preparing_request": "Feil under forberedelse av oppslagsforespørsel: {errorMessage}", + "apps.error.malformed_binding": "Denne bindingen er ikke riktig utformet. Kontakt apputvikleren.", + "apps.error.parser": "Parsefeil: {error}", + "apps.error.parser.empty_value": "Tomme verdier er ikke tillat.", + "apps.error.parser.execute_non_leaf": "Du må velge en underkommando.", + "apps.error.parser.missing_binding": "Mangler kommandobindinger.", + "apps.error.parser.missing_field_value": "Felt-verdi mangler.", + "apps.error.parser.missing_list_end": "Forventet listeavslutningstoken.", + "apps.error.parser.missing_quote": "Matchende doble anførselstegn forventes før slutten av input.", + "apps.error.parser.missing_source": "Skjema har verken innsending eller kilde.", + "apps.error.parser.missing_submit": "Ingen innkalling i binding eller form.", + "apps.error.parser.multiple_equal": "Flere `=`tegn er ikke tillatt.", + "apps.error.parser.no_argument_pos_x": "Ikke mulig å identifisere argumentet.", + "apps.error.parser.no_bindings": "Ingen kommandobindinger.", + "apps.error.parser.no_form": "Ingen skjema funnet.", + "apps.error.parser.no_match": "`{command}`: Ingen samsvarende kommando funnet i dette arbeidsområdet.", + "apps.error.parser.no_slash_start": "Kommandoen må starte med et `/`.", + "apps.error.parser.unexpected_character": "Uventet tegn.", + "apps.error.parser.unexpected_comma": "Uventet komma.", + "apps.error.parser.unexpected_error": "Uventet feil.", + "apps.error.parser.unexpected_flag": "Kommandoen godtar ikke flagget «{flagName}».", + "apps.error.parser.unexpected_squared_bracket": "Uventet listeåpning.", + "apps.error.parser.unexpected_state": "Uoppnåelig: Uventet tilstand i matchBinding: `{state}`.", + "apps.error.parser.unexpected_whitespace": "Uoppnåelig: Uventet mellomrom.", + "apps.error.responses.form.no_form": "Svartypen er `skjema`, men det ble ikke inkludert noe skjema i svaret.", + "apps.error.responses.navigate.no_url": "Svartypen er \"naviger\", men ingen nettadresse ble inkludert i svaret.", + "apps.error.responses.unexpected_error": "Mottok en uventet feil.", + "apps.error.responses.unexpected_type": "Appens svartype var ikke forventet. Svartype: {type}", + "apps.error.responses.unknown_field_error": "Mottok en feil for et ukjent felt. Feltnavn: `{field}`. Feil: `{error}`.", + "apps.error.responses.unknown_type": "Appens svartype støttes ikke. Svartype: {type}.", + "apps.error.unknown": "Ukjent feil oppstod.", + "apps.suggestion.dynamic.error": "Dynamisk utvalgsfeil", + "apps.suggestion.errors.parser_error": "Parsefeil", + "apps.suggestion.no_dynamic": "Ingen data ble returnert for dynamiske forslag", + "apps.suggestion.no_static": "Ingen matchende alternativer.", + "apps.suggestion.no_suggestion": "Ingen matchende forslag.", + "archivedChannelMessage": "Du ser på en **arkivert kanal**. Nye meldinger kan ikke postes.", + "autocomplete_selector.unknown_channel": "Ukjent kanal", + "browse_channels.archivedChannels": "Arkiverte kanaler", + "browse_channels.dropdownTitle": "Vis", + "browse_channels.noMore": "Ingen flere kanaler å bli med i", + "browse_channels.publicChannels": "Åpne kanaler", + "browse_channels.sharedChannels": "Delte kanaler", + "browse_channels.showArchivedChannels": "Vis: Arkiverte kanaler", + "browse_channels.showPublicChannels": "Vis: Åpne kanaler", + "browse_channels.showSharedChannels": "Vis: Delte kanaler", + "browse_channels.title": "Bla gjennom kanaler", + "camera_type.photo.option": "Ta bilde", + "camera_type.video.option": "Ta opp video", + "center_panel.archived.closeChannel": "Lukk kanal", + "channel_add_members.add_members.button": "Legg til medlemmer", + "channel_bookmark.add.detail_title": "Tittel", + "channel_bookmark.add.emoji": "Legg til emoji", + "channel_bookmark.add.failed_title": "Feil ved å legge til bokmerke", + "channel_bookmark.add.file_cancel": "Avbryt", + "channel_bookmark.add.file_title": "Vedlegg", + "channel_bookmark.add.file_upload_error": "Feil ved opplasting av fil. Vennligst prøv igjen.", + "channel_bookmark.add.file_uploading": "Laster opp ... ({progress}%)", + "channel_bookmark.add_edit.failed_desc": "Detaljer: {error}", + "channel_bookmark.copy_option": "Kopier lenke", + "channel_bookmark.delete.confirm": "Er du sikker på at du vil slette bokmerket {displayName}?", + "channel_bookmark.delete.confirm_title": "Slett bokmerke", + "channel_bookmark.delete.failed_detail": "Detaljer: {error}", + "channel_bookmark.delete.failed_title": "Feil ved sletting av bokmerke", + "channel_bookmark.delete.yes": "Ja", + "channel_bookmark.delete_option": "Slett", + "channel_bookmark.edit.failed_title": "Feil ved redigering av bokmerke", + "channel_bookmark.edit.save_button": "Lagre", + "channel_bookmark.edit_option": "Rediger", + "channel_bookmark.share_option": "Dele", + "channel_bookmark_add.link": "Lenke", + "channel_bookmark_add.link.input.description": "Legg til en lenke til ethvert innlegg, fil eller ekstern lenke", + "channel_bookmark_add.link.invalid": "Vennligst skriv inn en gyldig lenke", + "channel_files.empty.paragraph": "Filer som er lagt ut i denne kanalen vil vises her.", + "channel_files.empty.title": "Ingen filer ennå", + "channel_files.noFiles.paragraph": "Denne kanalen inneholder ingen filer med de brukte filtrene", + "channel_files.noFiles.title": "Ingen filer funnet", + "channel_header.directchannel.you": "{displayName} (deg)", + "channel_header.info": "Vis info", + "channel_info.add_bookmark": "Legg til et bokmerke", + "channel_info.add_bookmark.file": "Legg ved en fil", + "channel_info.add_bookmark.link": "Legg til en lenke", + "channel_info.add_bookmark.max_reached": "Denne kanalen har nådd maksimalt antall bokmerker.", + "channel_info.add_members": "Legg til medlemmer", + "channel_info.alertNo": "Nei", + "channel_info.alertYes": "Ja", + "channel_info.alert_retry": "Prøv igjen", + "channel_info.archive": "Arkiver kanal", + "channel_info.archive_failed": "Det oppsto en feil ved forsøk på å arkivere kanalen {displayName}", + "channel_info.archive_title": "Arkiver {term}", + "channel_info.channel_auto_follow_threads": "Følg alle tråder i denne kanalen", + "channel_info.channel_auto_follow_threads_failed": "Det oppstod en feil under forsøk på å automatisk følge alle tråder i kanalen {displayName}", + "channel_info.channel_files": "Filer", + "channel_info.close": "Lukk", + "channel_info.close_dm": "Lukk direktemelding", + "channel_info.close_dm_channel": "Er du sikker på at du vil lukke denne direktemeldingen? Dette vil fjerne den fra startskjermen, men du kan alltid åpne den igjen.", + "channel_info.close_gm": "Lukk gruppemelding", + "channel_info.close_gm_channel": "Er du sikker på at du vil lukke denne gruppemeldingen? Dette vil fjerne den fra startskjermen, men du kan alltid åpne den igjen.", + "channel_info.convert_failed": "Vi kunne ikke konvertere {displayName} til en privat kanal.", + "channel_info.convert_gm_to_channel": "Konverter til en privat kanal", + "channel_info.convert_gm_to_channel.button_text": "Konverter til privat kanal", + "channel_info.convert_gm_to_channel.button_text_converting": "Konverterer...", + "channel_info.convert_gm_to_channel.conversion_error": "Noe gikk galt. Kunne ikke konvertere gruppemelding til privat kanal.", + "channel_info.convert_gm_to_channel.loading.footer": "Henter detaljer ...", + "channel_info.convert_gm_to_channel.screen_title": "Konverter til privat kanal", + "channel_info.convert_gm_to_channel.team_selector_list.title": "Velg team", + "channel_info.convert_gm_to_channel.warning.body.yourself": "deg selv", + "channel_info.convert_gm_to_channel.warning.bodyXXXX": "Du er i ferd med å konvertere gruppemeldingen med {memberNames} til en kanal. Dette kan ikke gjøres om.", + "channel_info.convert_gm_to_channel.warning.header": "Samtaleloggen vil være synlig for alle kanalmedlemmer", + "channel_info.convert_gm_to_channel.warning.no_teams.body": "Gruppemelding kan ikke konverteres til en kanal fordi medlemmene ikke er en del av det samme teamet. Legg til alle medlemmer i ett enkelt team for å konvertere denne gruppemeldingen til en kanal.", + "channel_info.convert_gm_to_channel.warning.no_teams.header": "Kan ikke konvertere til en kanal fordi gruppemedlemmer er en del av forskjellige team", + "channel_info.convert_private": "Konverter til privat kanal", + "channel_info.convert_private_success": "{displayName} er nå en privat kanal.", + "channel_info.convert_private_title": "Konverter {displayName} til en privat kanal?", + "channel_info.copied": "Kopiert", + "channel_info.copy_link": "Kopier lenke", + "channel_info.copy_purpose_text": "Kopier formålstekst", + "channel_info.custom_status": "Egendefinert status:", + "channel_info.edit_header": "Rediger overskrift", + "channel_info.error_close": "Lukk", + "channel_info.favorite": "Favoritt", + "channel_info.favorited": "Favorittmarkert", + "channel_info.header": "Overskrift:", + "channel_info.ignore_mentions": "Ignorer @channel, @here, @all", + "channel_info.leave": "Forlat", + "channel_info.leave_channel": "Forlat kanal", + "channel_info.leave_private_channel": "Er du sikker på at du vil forlate den private kanalen {displayName}? Du kan ikke bli med på kanalen igjen med mindre du blir invitert på nytt.", + "channel_info.leave_public_channel": "Er du sikker på at du vil forlate den offentlige kanalen {displayName}? Du kan alltid bli med igjen.", + "channel_info.local_time": "Lokal tid", + "channel_info.members": "Medlemmer", + "channel_info.mention": "Omtale", + "channel_info.mobile_notifications": "Mobilvarsler", + "channel_info.muted": "Demp", + "channel_info.nickname": "Kallenavn", + "channel_info.notification.all": "Alle", + "channel_info.notification.default": "Standardinnstilling", + "channel_info.notification.mention": "Omtaler", + "channel_info.notification.none": "Aldri", + "channel_info.pinned_messages": "Festede meldinger", + "channel_info.position": "Posisjon", + "channel_info.private_channel": "Privat kanal", + "channel_info.public_channel": "Åpen kanal", + "channel_info.send_a_mesasge": "Send melding", + "channel_info.send_mesasge": "Send melding", + "channel_info.set_header": "Angi overskrift", + "channel_info.unarchive": "Gjenåpne arkivert kanal", + "channel_info.unarchive_description": "Er du sikker på at du vil gjenåpne arkivet {term} {name}?", + "channel_info.unarchive_failed": "Det oppstod en feil ved forsøket på å gjenåpne kanalen {displayName}", + "channel_info.unarchive_title": "Gjenåpne arkivert {term}", + "channel_into.convert_gm_to_channel.team_selector.label": "Team", + "channel_into.convert_gm_to_channel.team_selector.placeholder": "Velg et team", + "channel_intro.createdBy": "Laget av {user} den {date}", + "channel_intro.createdOn": "Opprettet den {date}", + "channel_list.channels_category": "Kanaler", + "channel_list.dms_category": "Direktemeldinger", + "channel_list.favorites_category": "Favoritter", + "channel_list.find_channels": "Finn kanaler...", + "channel_loader.someone": "Noen", + "channel_modal.descriptionHelp": "Beskriv hvordan denne kanalen skal brukes.", + "channel_modal.header": "Overskrift", + "channel_modal.headerEx": "Bruk Markdown for å formatere overskriftstekst", + "channel_modal.makePrivate.description": "Når en kanal er satt til privat, kan bare inviterte teammedlemmer få tilgang til og delta i den kanalen", + "channel_modal.makePrivate.label": "Gjør privat", + "channel_modal.name": "Нэр", + "channel_modal.nameEx": "Bugs, markedsføring", + "channel_modal.optional": "(valgfri)", + "channel_modal.purpose": "Formål", + "channel_modal.purposeEx": "En kanal for å registrere feil og forbedringer", + "channel_notification_preferences.default": "(standard)", + "channel_notification_preferences.muted_content": "Du kan endre varslingsinnstillingene, men du vil ikke motta varsler før demping er fjernet for kanalen.", + "channel_notification_preferences.muted_title": "Denne kanalen er dempet", + "channel_notification_preferences.notification.all": "Alle nye meldinger", + "channel_notification_preferences.notification.mention": "Kun omtaler", + "channel_notification_preferences.notification.none": "Ingenting", + "channel_notification_preferences.notification.thread_replies": "Gi meg beskjed om svar på tråder jeg følger på denne kanalen", + "channel_notification_preferences.notify_about": "Gi meg varsel om...", + "channel_notification_preferences.reset_default": "Tilbakestill til standard", + "channel_notification_preferences.thread_replies": "Trådsvar", + "channel_notification_preferences.unmute_content": "Fjern demping av kanal", + "combined_system_message.added_to_channel.many_expanded": "{users} og {lastUser} ble **lagt til kanalen** av {actor}.", + "combined_system_message.added_to_channel.one": "{firstUser} **lagt til kanalen** av {actor}.", + "combined_system_message.added_to_channel.one_you": "Du ble **lagt til kanalen** av {actor}.", + "combined_system_message.added_to_channel.two": "{firstUser} og {secondUser} **lagt til kanalen** av {actor}.", + "combined_system_message.added_to_team.many_expanded": "{users} og {lastUser} ble **lagt til teamet** av {actor}.", + "combined_system_message.added_to_team.one": "{firstUser} **lagt til teamet** av {actor}.", + "combined_system_message.added_to_team.one_you": "Du ble **lagt til teamet** av {actor}.", + "combined_system_message.added_to_team.two": "{firstUser} og {secondUser} **lagt til teamet** av {actor}.", + "combined_system_message.joined_channel.many_expanded": "{users} og {lastUser} **ble med i kanalen**.", + "combined_system_message.joined_channel.one": "{firstUser} **ble med i kanalen**.", + "combined_system_message.joined_channel.one_you": "Du **ble med i kanalen**.", + "combined_system_message.joined_channel.two": "{firstUser} og {secondUser} **ble med i kanalen**.", + "combined_system_message.joined_team.many_expanded": "{users} og {lastUser} **ble med i teamet**.", + "combined_system_message.joined_team.one": "{firstUser} **ble med i teamet**.", + "combined_system_message.joined_team.one_you": "Du **ble med i teamet**.", + "combined_system_message.joined_team.two": "{firstUser} og {secondUser} **ble med i teamet**.", + "combined_system_message.left_channel.many_expanded": "{users} og {lastUser} **forlot kanalen**.", + "combined_system_message.left_channel.one": "{firstUser} **forlot kanalen**.", + "combined_system_message.left_channel.one_you": "Du **forlot kanalen**.", + "combined_system_message.left_channel.two": "{firstUser} og {secondUser} **forlot kanalen**.", + "combined_system_message.left_team.many_expanded": "{users} og {lastUser} **forlot teamet**.", + "combined_system_message.left_team.one": "{firstUser} **forlot teamet**.", + "combined_system_message.left_team.one_you": "Du **forlot laget**.", + "combined_system_message.left_team.two": "{firstUser} og {secondUser} **forlot teamet**.", + "combined_system_message.removed_from_channel.many_expanded": "{users} og {lastUser} ble **fjernet fra kanalen**.", + "combined_system_message.removed_from_channel.one": "{firstUser} ble **fjernet fra kanalen**.", + "combined_system_message.removed_from_channel.one_you": "Du ble **fjernet fra kanalen**.", + "combined_system_message.removed_from_channel.two": "{firstUser} og {secondUser} ble **fjernet fra kanalen**.", + "combined_system_message.removed_from_team.many_expanded": "{users} og {lastUser} ble **fjernet fra teamet**.", + "combined_system_message.removed_from_team.one": "{firstUser} ble **fjernet fra teamet**.", + "combined_system_message.removed_from_team.one_you": "Du ble **fjernet fra teamet**.", + "combined_system_message.removed_from_team.two": "{firstUser} og {secondUser} ble **fjernet fra teamet**.", + "combined_system_message.you": "Du", + "connection_banner.connected": "Forbindelsen gjenopprettet", + "connection_banner.connecting": "Kobler til...", + "connection_banner.not_connected": "Ingen Internett forbindelse", + "connection_banner.not_reachable": "Serveren kan ikke nås", + "create_direct_message.title": "Opprett direktemelding", + "create_post.deactivated": "Du ser på en arkivert kanal med en deaktivert bruker.", + "create_post.thread_reply": "Svar på denne tråden...", + "create_post.write": "Skriv til {channelDisplayName}", + "custom_status.expiry.at": "på", + "custom_status.expiry.until": "Før", + "custom_status.expiry_dropdown.custom": "Egendefinert", + "custom_status.expiry_dropdown.date_and_time": "Dato og tid", + "custom_status.expiry_dropdown.dont_clear": "Ikke fjern", + "custom_status.expiry_dropdown.four_hours": "4 timer", + "custom_status.expiry_dropdown.one_hour": "1 time", + "custom_status.expiry_dropdown.thirty_minutes": "30 minutter", + "custom_status.expiry_dropdown.this_week": "Denne uken", + "custom_status.expiry_dropdown.today": "I dag", + "custom_status.expiry_time.today": "I dag", + "custom_status.expiry_time.tomorrow": "I morgen", + "custom_status.failure_message": "Kunne ikke oppdatere status. Prøv igjen", + "custom_status.set_status": "Angi en egendefinert status", + "custom_status.suggestions.in_a_meeting": "I et møte", + "custom_status.suggestions.on_a_vacation": "På ferie", + "custom_status.suggestions.out_for_lunch": "Ute til lunsj", + "custom_status.suggestions.out_sick": "Syk", + "custom_status.suggestions.recent_title": "Siste", + "custom_status.suggestions.title": "Forslag", + "custom_status.suggestions.working_from_home": "Hjemmekontor", + "date_separator.today": "I dag", + "date_separator.yesterday": "I går", + "default_skin_tone": "Standard hudfarge", + "display_settings.clock.military": "24 timer", + "display_settings.clock.standard": "12 timer", + "display_settings.clockDisplay": "Klokkevisning", + "display_settings.crt": "Skjulte svartråder", + "display_settings.crt.off": "Av", + "display_settings.crt.on": "På", + "display_settings.theme": "Tema", + "display_settings.timezone": "Tidssone", + "display_settings.tz.auto": "Auto", + "display_settings.tz.manual": "Manuelt", + "download.error": "Kan ikke laste ned filen. Prøv igjen senere", + "edit_post.editPost": "Rediger innlegget...", + "edit_post.save": "Lagre", + "edit_server.description": "Angi et visningsnavn for denne serveren", + "edit_server.display_help": "Server: {url}", + "edit_server.save": "Lagre", + "edit_server.saving": "Lagrer", + "edit_server.title": "Rediger navn på server", + "emoji_picker.activities": "Aktiviteter", + "emoji_picker.animals-nature": "Dyr og natur", + "emoji_picker.custom": "Egendefinert", + "emoji_picker.flags": "Flagg", + "emoji_picker.food-drink": "Mat og drikke", + "emoji_picker.objects": "Gjenstander", + "emoji_picker.people-body": "Mennesker og kropp", + "emoji_picker.recent": "Siste brukte", + "emoji_picker.searchResults": "Søkeresultater", + "emoji_picker.smileys-emotion": "Smileys og følelser", + "emoji_picker.symbols": "Symboler", + "emoji_picker.travel-places": "Reise og steder", + "emoji_skin.dark_skin_tone": "mørk hudfarge", + "emoji_skin.default": "standard hudfarge", + "emoji_skin.light_skin_tone": "lys hudfarge", + "emoji_skin.medium_dark_skin_tone": "middels mørk hudtone", + "emoji_skin.medium_light_skin_tone": "middels lys hudfarge", + "emoji_skin.medium_skin_tone": "middels hudfarge", + "extension.no_memberships.description": "For å dele innhold, må du være medlem av et team på en Mattermost-server.", + "extension.no_memberships.title": "Ikke medlem av noe team ennå", + "extension.no_servers.description": "For å dele innhold, må du være pålogget en Mattermost-server.", + "extension.no_servers.title": "Ikke tilkoblet noen servere", + "file_upload.fileAbove": "Filer må være mindre enn {max}", + "find_channels.directory": "Katalog", + "find_channels.new_channel": "Ny kanal", + "find_channels.open_dm": "Åpne en DM", + "find_channels.title": "Finn kanaler", + "friendly_date.daysAgo": "{count} {count, plural, one {day} other {days}} siden", + "friendly_date.hoursAgo": "{count} {count, plural, one {hour} other {hours}} siden", + "friendly_date.minsAgo": "{count} {count, plural, one {min} other {mins}} siden", + "friendly_date.monthsAgo": "{count} {count, plural, one {month} other {months}} siden", + "friendly_date.now": "Nå", + "friendly_date.yearsAgo": "{count} {count, plural, one {year} other {years}} siden", + "friendly_date.yesterday": "I går", + "gallery.copy_link.failed": "Kunne ikke kopiere lenke til utklippstavle", + "gallery.downloading": "Laster ned...", + "gallery.footer.channel_name": "Delt i {channelName}", + "gallery.image_saved": "Bilde lagret", + "gallery.open_file": "Åpne fil", + "gallery.opening": "Åpner...", + "gallery.preparing": "Klargjør...", + "gallery.save_failed": "Kan ikke lagre filen", + "gallery.unsupported": "Forhåndsvisning støttes ikke for denne filtypen. Prøv å laste ned eller dele for å åpne den i en annen app.", + "gallery.video_saved": "Video lagret", + "general_settings.about": "Om {appTitle}", + "general_settings.advanced_settings": "Avanserte innstllinger", + "general_settings.display": "Visning", + "general_settings.help": "Hjelp", + "general_settings.notifications": "Varslinger", + "general_settings.report_problem": "Rapporter et problem", + "generic.back": "Tilbake", + "get_post_link_modal.title": "Kopier lenke", + "global_threads.allThreads": "Alle dine tråder", + "global_threads.emptyThreads.message": "Alle tråder du er nevnt i eller har deltatt i vil vises her sammen med tråder du følger.", + "global_threads.emptyThreads.title": "Ingen tråder som er fulgt enda", + "global_threads.emptyUnreads.message": "Ser ut til at du er ajour!", + "global_threads.emptyUnreads.title": "Ingen uleste tråder", + "global_threads.markAllRead.cancel": "Avbryt", + "global_threads.markAllRead.markRead": "Marker som lest", + "global_threads.markAllRead.message": "Dette vil fjerne ulest status for alle trådene dine som vises her", + "global_threads.markAllRead.title": "Er du sikker på at du vil markere alle tråder som lest?", + "global_threads.options.mark_as_read": "Marker som lest", + "global_threads.options.open_in_channel": "Åpne i kanal", + "global_threads.options.title": "Tråd handlinger", + "global_threads.unreads": "Uleste", + "home.header.plus_menu": "Valg", + "integration_selector.multiselect.submit": "Ferdig", + "interactive_dialog.submit": "Send inn", + "intro.add_members": "Legg til medlemmer", + "intro.channel_info": "Info", + "intro.created_by": "opprettet av {creator} den {date}.", + "intro.direct_message": "Dette er starten på din samtale med {teammate}. Meldinger og filer som deles her, vises ikke til noen andre.", + "intro.group_message.after_gm_as_dm": "Dette er starten på din samtale med denne gruppen. Meldinger og filer som deles her, vises ikke til noen andre utenfor gruppen.", + "intro.group_message.all": "Du vil bli varslet om alle aktiviteter i denne gruppemeldingen.", + "intro.group_message.common": "Dette er starten på din samtale med denne gruppen.", + "intro.group_message.mention": "Du har valgt å bli varslet kun når du er nevnt i denne gruppemeldingen.", + "intro.group_message.muted": "Denne gruppemeldingen er satt til dempet, så du vil ikke motta varsel.", + "intro.group_message.none": "Du har valgt å aldri bli varslet i denne gruppemeldingen.", + "intro.private_channel": "Privat kanal", + "intro.public_channel": "Åpen kanal", + "intro.townsquare": "Velkommen til {name}. Alle blir automatisk medlemmer av denne kanalen når de blir med i teamet.", + "intro.welcome": "Velkommen til kanalen {displayName}.", + "intro.welcome.private": "Bare inviterte medlemmer kan se meldinger som er postet i denne private kanalen.", + "intro.welcome.public": "Legg til noen flere teammedlemmer til kanalen eller start en samtale nedenfor.", + "invite.members.already_member": "Denne personen er allerede et teammedlem", + "invite.members.user_is_guest": "Kontakt din administrator for å gjøre denne gjesten til et fullverdig medlem", + "invite.search.email_invite": "inviter", + "invite.search.no_results": "Fant ikke noe som matcher", + "invite.searchPlaceholder": "Skriv inn et navn eller en e-postadresse…", + "invite.sendInvitationsTo": "Send invitasjoner til…", + "invite.send_error": "Noe gikk galt under forsøk på å sende invitasjoner. Kontroller nettverkstilkoblingen og prøv igjen.", + "invite.send_invite": "Send", + "invite.shareLink": "Del lenke", + "invite.summary.back": "Gå tilbake", + "invite.summary.done": "Ferdig", + "invite.summary.email_invite": "En e-post med invitasjon har blitt sendt", + "invite.summary.error": "{invitationsCount, plural, one {Invitation} other {Invitations}} kunne ikke sendes", + "invite.summary.member_invite": "Invitert som medlem av {teamDisplayName}", + "invite.summary.not_sent": "{notSentCount, plural, one {Invitation wasn’t} other {Invitations weren’t}} sendt", + "invite.summary.report.notSent": "{count} {count, plural, one {invitation} other {invitations}} ikke sendt", + "invite.summary.smtp_failure": "SMTP er ikke konfigurert i System Console", + "invite.summary.try_again": "Prøv igjen", + "invite.title": "Inviter", + "invite.title.summary": "Invitasjonssammendrag", + "invite_people_to_team.message": "Her er en lenke for å samarbeide og kommunisere med oss på Mattermost.", + "invite_people_to_team.title": "Bli med i {team}-teamet", + "join_team.error.group_error": "Du må være medlem av en tilknyttet gruppe for å bli med i dette teamet.", + "join_team.error.message": "Det har oppstått en feil med å bli med i teamet", + "join_team.error.title": "Det oppsto en feil med å bli med i et team", + "last_users_message.added_to_channel.type": "ble **lagt til kanalen** av {actor}.", + "last_users_message.added_to_team.type": "ble **lagt til teamet** av {actor}.", + "last_users_message.first": "{firstUser} og ", + "last_users_message.joined_channel.type": "**ble med i kanalen**.", + "last_users_message.joined_team.type": "**ble med i teamet**.", + "last_users_message.left_channel.type": "**forlot kanalen**.", + "last_users_message.left_team.type": "**forlot teamet**.", + "last_users_message.others": "{numOthers} andre ", + "last_users_message.removed_from_channel.type": "ble **fjernet fra kanalen**.", + "last_users_message.removed_from_team.type": "ble **fjernet fra teamet**.", + "load_categories_error.message": "Det oppsto et problem med å laste innholdet for denne serveren.", + "load_categories_error.title": "Kunne ikke laste inn kategorier for {serverName}", + "load_channels_error.message": "Det oppsto et problem med å laste inn innhold for dette teamet.", + "load_channels_error.title": "Kunne ikke laste inn {teamDisplayName}", + "load_teams_error.message": "Det oppsto et problem med å laste innhold for denne tjeneren.", + "load_teams_error.title": "Kunne ikke laste inn {serverName}", + "login.email": "E-post", + "login.forgot": "Glemt ditt passord?", + "login.invalid_credentials": "Kombinasjonen av e-post og passord er feil", + "login.ldapUsername": "AD/LDAP-brukernavn", + "login.or": "eller", + "login.password": "Passord", + "login.signIn": "Logg på", + "login.signingIn": "Logger på", + "login.username": "Brukernavn", + "login_mfa.enterToken": "For å fullføre påloggingsprosessen, skriv inn koden fra mobiltelefonens autentiseringsapp.", + "login_mfa.token": "Skriv inn MFA-token", + "login_mfa.tokenReq": "Vennligst skriv inn et MFA-token", + "markdown.latex.error": "Latex renderingsfeil", + "markdown.max_nodes.error": "Denne meldingen er for lang til å vises i sin helhet på en mobiltelefon. Se den på desktop appen eller kontakt en administrator for å øke denne grensen.", + "mentions.empty.paragraph": "Du vil se meldinger her når noen nevner deg eller bruker nøkkelord du overvåker.", + "mentions.empty.title": "Ingen omtaler ennå", + "mobile.about.appVersion": "App versjon: {version} (Build {number})", + "mobile.account.settings.save": "Lagre", + "mobile.acknowledgements.header": "Anerkjennelser", + "mobile.action_menu.select": "Velg et alternativ", + "mobile.add_team.create_team": "Opprett et nytt team", + "mobile.add_team.join_team": "Bli med et annet team", + "mobile.android.back_handler_exit": "Trykk tilbake en gang til for å avslutte", + "mobile.android.photos_permission_denied_description": "Last opp bilder til serveren din eller lagre dem på enheten din. Åpne Innstillinger for å gi {applicationName} lese- og skrivetilgang til bildebiblioteket ditt.", + "mobile.android.photos_permission_denied_title": "{applicationName} vil ha tilgang til bildene dine", + "mobile.announcement_banner.title": "Kunngjøring", + "mobile.calls_audio_device": "Velg lydenhet", + "mobile.calls_bluetooth": "Bluetooth", + "mobile.calls_call_ended": "Anrop avsluttet", + "mobile.calls_call_screen": "Anrop", + "mobile.calls_call_thread": "Samtale tråd", + "mobile.calls_cancel": "Avbryt", + "mobile.calls_captions": "Bildetekster", + "mobile.calls_captions_turned_on": "Direkteteksting er på", + "mobile.calls_disable": "Deaktiver anrop", + "mobile.calls_dismiss": "Avvis", + "mobile.calls_enable": "Aktiver anrop", + "mobile.calls_end_call_title": "Avslutt anropet", + "mobile.calls_end_msg_channel": "Er du sikker på at du vil avslutte en samtale med {numParticipants} deltakere i {displayName}?", + "mobile.calls_end_msg_channel_default": "Er du sikker på at du vil avslutte oppringningen?", + "mobile.calls_end_msg_dm": "Er du sikker på at du vil avslutte en samtale med {displayName}?", + "mobile.calls_end_permission_msg": "Du har ikke tillatelse til å avslutte samtalen. Vennligst be personen som startet samtalen om å avslutte den.", + "mobile.calls_end_permission_title": "Feil", + "mobile.calls_ended_at": "Sluttet kl", + "mobile.calls_error_message": "Feil: {error}", + "mobile.calls_error_title": "Feil", + "mobile.calls_group_calls_not_available": "Anrop er kun tilgjengelig i DM-kanaler.", + "mobile.calls_headset": "Hodetelefoner", + "mobile.calls_hide_cc": "Skjul direkte teksting", + "mobile.calls_host": "vert", + "mobile.calls_host_controls": "Vertskontroller", + "mobile.calls_host_end_confirm": "Avslutt samtalen for alle", + "mobile.calls_host_leave_confirm": "Forlat samtale", + "mobile.calls_host_leave_title": "Er du sikker på at du vil forlate denne samtalen?", + "mobile.calls_host_rec": "Du tar opp dette møtet. Vurder å fortelle alle at dette møtet blir tatt opp.", + "mobile.calls_host_rec_error": "Prøv å ta opp igjen. Du kan også kontakte systemadministratoren for feilsøkingshjelp.", + "mobile.calls_host_rec_error_title": "Noe gikk galt med opptaket", + "mobile.calls_host_rec_stop_body": "Samtaleopptaket vil bli behandlet og lagt ut i samtaletråden. Er du sikker på at du vil stoppe opptaket?", + "mobile.calls_host_rec_stop_confirm": "Stopp opptaket", + "mobile.calls_host_rec_stop_title": "Stopp opptaket", + "mobile.calls_host_rec_stopped": "Du kan finne opptaket i denne samtalens chattråd når den er ferdig behandlet.", + "mobile.calls_host_rec_stopped_title": "Opptaket har stoppet. Behandler...", + "mobile.calls_host_rec_title": "Du gjør opptak", + "mobile.calls_host_rec_trans_stop_body": "Samtaleopptaket og transkriberingsfilene vil bli behandlet og lagt ut i samtaletråden. Er du sikker på at du vil stoppe opptaket og transkriberingen?", + "mobile.calls_host_rec_trans_stop_title": "Stopp opptaket og transkriberingen", + "mobile.calls_host_transcription": "Vurder å fortelle alle at dette møtet blir tatt opp og transkribert.", + "mobile.calls_host_transcription_title": "Opptak og transkribering har startet", + "mobile.calls_incoming_dm": "{name} inviterer deg til en samtale", + "mobile.calls_join": "Bli med", + "mobile.calls_join_call": "Bli med på samtale", + "mobile.calls_joining": "Blir med...", + "mobile.calls_lasted": "Varte {duration}", + "mobile.calls_leave": "Forlat", + "mobile.calls_leave_call": "Forlat samtalen", + "mobile.calls_limit_msg": "Maksimalt antall deltakere per telefonsamtale er {maxParticipants}. Kontakt systemadministratoren din for å øke grensen.", + "mobile.calls_limit_msg_GA": "Oppgrader til Cloud Professional eller Cloud Enterprise for å aktivere gruppetelefonsamtaler med mer enn {maxParticipants} deltakere.", + "mobile.calls_limit_reached": "Deltakergrensen er nådd", + "mobile.calls_lower_hand": "Senk hånden", + "mobile.calls_make_host": "Gjør til vert", + "mobile.calls_mic_error": "For å delta, åpne Innstillinger for å gi Mattermost tilgang til mikrofonen din.", + "mobile.calls_more": "Mer", + "mobile.calls_mute": "Demp", + "mobile.calls_mute_others": "Demp andre", + "mobile.calls_mute_participant": "Demp deltaker", + "mobile.calls_name_is_talking_postfix": "snakker...", + "mobile.calls_noone_talking": "Ingen snakker", + "mobile.calls_not_available_msg": "Kontakt systemadministratoren din for å aktivere funksjonen.", + "mobile.calls_not_available_option": "(Ikke tilgjengelig)", + "mobile.calls_not_available_title": "Calls er ikke aktivert", + "mobile.calls_not_connected": "Du er ikke koblet til en telefonsamtale i gjeldende kanal.", + "mobile.calls_ok": "Ok", + "mobile.calls_okay": "Ok", + "mobile.calls_open_channel": "Åpne kanal", + "mobile.calls_participant_limit_title_GA": "Denne telefonsamtalen er full", + "mobile.calls_participant_rec": "Verten har begynt å ta opp dette møtet. Ved å bli i møtet gir du samtykke til å bli tatt opp.", + "mobile.calls_participant_rec_title": "Opptak pågår", + "mobile.calls_participant_transcription": "Verten har startet opptak og transkribering av dette møtet. Ved å bli i møtet gir du samtykke til å bli tatt opp og transkribert.", + "mobile.calls_participant_transcription_title": "Opptak og transkribering pågår", + "mobile.calls_participants": "Deltakere", + "mobile.calls_people": "Folk", + "mobile.calls_phone": "Telefon", + "mobile.calls_quality_warning": "Samtalekvaliteten kan forringes på grunn av ustabile nettverksforhold.", + "mobile.calls_raise_hand": "Rekke opp hånda", + "mobile.calls_react": "Reagere", + "mobile.calls_record": "Ta opp", + "mobile.calls_recording_start_in_progress": "Et opptak er allerede i gang.", + "mobile.calls_recording_start_no_permissions": "Du har ikke tillatelse til å starte et opptak. Vennligst be samtaleverten om å starte et opptak.", + "mobile.calls_recording_stop_no_permissions": "Du har ikke tillatelse til å stoppe opptaket. Vennligst be samtaleverten om å stoppe opptaket.", + "mobile.calls_recording_stop_none_in_progress": "Ingen opptak pågår.", + "mobile.calls_remove": "Fjern", + "mobile.calls_remove_alert_body": "Er du sikker på at du vil fjerne {displayName} fra samtalen? ", + "mobile.calls_remove_alert_title": "Fjern deltaker", + "mobile.calls_remove_participant": "Fjern fra samtale", + "mobile.calls_removed_alert_body": "Verten fjernet deg fra samtalen.", + "mobile.calls_removed_alert_title": "Du ble fjernet fra samtalen", + "mobile.calls_request_message": "Samtaler kjører for øyeblikket i testmodus, og bare systemadministratorer kan starte dem. Ta kontakt med systemadministratoren for assistanse", + "mobile.calls_request_title": "Samtaler er for øyeblikket ikke aktivert", + "mobile.calls_see_logs": "Se logger på server", + "mobile.calls_show_cc": "Vis sanntidsteksting", + "mobile.calls_speaker": "Høytaler", + "mobile.calls_start_call": "Start samtale", + "mobile.calls_start_call_exists": "En samtale pågår allerede i kanalen.", + "mobile.calls_started_call": "Samtalen startet", + "mobile.calls_starting": "Starter...", + "mobile.calls_stop_recording": "Stopp opptak", + "mobile.calls_stop_screenshare": "Stopp skjermdeling", + "mobile.calls_tablet": "", + "mobile.calls_thread": "Tråd", + "mobile.calls_unmute": "Fjern demping", + "mobile.calls_user_left_channel_error_message": "Du har forlatt kanalen og har blitt frakoblet samtalen.", + "mobile.calls_user_left_channel_error_title": "Du har forlatt kanalen", + "mobile.calls_user_removed_from_channel_error_message": "Du har blitt fjernet fra kanalen, og har blitt koblet fra samtalen.", + "mobile.calls_user_removed_from_channel_error_title": "Du ble fjernet fra kanalen", + "mobile.calls_view_profile": "Vis profil", + "mobile.calls_viewing_screen": "Du ser på skjermen til {name}", + "mobile.calls_you": "(du)", + "mobile.calls_you_2": "Du", + "mobile.camera_photo_permission_denied_description": "Ta bilder og last dem opp til serveren din eller lagre dem på enheten din. Åpne Innstillinger for å gi {applicationName} lese- og skrivetilgang til kameraet ditt.", + "mobile.camera_photo_permission_denied_title": "{applicationName} vil ha tilgang til kameraet ditt", + "mobile.camera_type.title": "Kameraalternativer", + "mobile.channel_add_members.error": "Det har oppstått en feil og vi kunne ikke legge til disse brukerne på kanalen.", + "mobile.channel_info.alertNo": "Nei", + "mobile.channel_info.alertYes": "Ja", + "mobile.channel_list.recent": "Nylig", + "mobile.channel_list.unreads": "Uleste", + "mobile.commands.error_title": "Feil ved utføring av kommando", + "mobile.components.select_server_view.connect": "Koble til", + "mobile.components.select_server_view.connecting": "Kobler til", + "mobile.components.select_server_view.displayHelp": "Velg et visningsnavn for serveren din", + "mobile.components.select_server_view.displayName": "Visningsnavn", + "mobile.components.select_server_view.enterServerUrl": "Skriv inn nettadresse til server", + "mobile.components.select_server_view.msg_connect": "La oss koble til en server", + "mobile.components.select_server_view.msg_description": "En server er teamets kommunikasjonshub som du får tilgang til ved hjelp av en unik nettadresse", + "mobile.components.select_server_view.msg_welcome": "Vekommen", + "mobile.components.select_server_view.proceed": "Fortsett", + "mobile.create_channel": "Opprett", + "mobile.create_channel.title": "Ny kanal", + "mobile.create_direct_message.max_limit_reached": "Gruppemeldinger er begrenset til {maxCount} medlemmer", + "mobile.create_direct_message.start": "Start samtale", + "mobile.create_post.read_only": "Denne kanalen er skrivebeskyttet.", + "mobile.custom_list.no_results": "Ingen resultater", + "mobile.custom_status.choose_emoji": "Velg en emoji", + "mobile.custom_status.clear_after": "Fjern etter", + "mobile.custom_status.clear_after.title": "Fjern egendefinert status etter", + "mobile.custom_status.modal_confirm": "Fullført", + "mobile.deep_link.invalid": "Denne lenken du prøver å åpne er ugyldig.", + "mobile.diagnostic_id.empty": "En DiagnosticId-verdi mangler for denne serveren. Kontakt systemadministratoren din for å vurdere denne verdien og starte serveren på nytt.", + "mobile.direct_message.error": "Vi kunne ikke åpne en DM med {displayName}.", + "mobile.display_settings.clockDisplay": "Klokkevisning", + "mobile.display_settings.crt": "Skjulte svartråder", + "mobile.display_settings.timezone": "Tidssone", + "mobile.document_preview.failed_title": "Åpne dokument mislyktes", + "mobile.downloader.disabled_title": "Nedlasting deaktivert", + "mobile.downloader.failed_title": "Nedlasting feilet", + "mobile.edit_channel": "Lagre", + "mobile.edit_post.delete_question": "Er du sikker på at du vil slette dette innlegget?", + "mobile.edit_post.delete_title": "Bekreft sletting av innlegget", + "mobile.edit_post.error": "Det oppsto et problem med å redigere denne meldingen. Vær så snill, prøv på nytt.", + "mobile.edit_post.title": "Rediger melding", + "mobile.error_handler.button": "Start på nytt", + "mobile.error_handler.title": "Det oppstod en uventet feil", + "mobile.file_upload.disabled2": "Filopplasting fra mobil er deaktivert.", + "mobile.file_upload.max_warning": "Opplastinger begrenset til maksimalt {count} filer.", + "mobile.files_paste.error_description": "Det oppsto en feil under innliming av filen(e). Vennligst prøv igjen.", + "mobile.files_paste.error_dismiss": "Avvis", + "mobile.files_paste.error_title": "Innliming mislyktes", + "mobile.gallery.title": "{index} av {total}", + "mobile.integration_selector.loading_channels": "Laster inn kanaler...", + "mobile.integration_selector.loading_options": "Laster inn alternativer...", + "mobile.ios.photos_permission_denied_description": "Last opp bilder og videoer til serveren din eller lagre dem på enheten din. Åpne Innstillinger for å gi {applicationName} lese- og skrivetilgang til bilde- og videobiblioteket ditt.", + "mobile.ios.photos_permission_denied_title": "{applicationName} vil gjerne ha tilgang til bildene dine", + "mobile.ios.plist.NSAppleMusicUsageDescription": "Å aktivere tilgang til mediebiblioteket ditt betyr at du kan legge ved filer fra mediebiblioteket til meldingene dine i {applicationName}.", + "mobile.ios.plist.NSBluetoothAlwaysUsageDescription": "Å aktivere tilgang til Bluetooth betyr at vi kan synkronisere innhold på tvers av enhetene og klientene dine.", + "mobile.ios.plist.NSBluetoothPeripheralUsageDescription": "Aktivering av tilgang til Bluetooth betyr at vi kan koble til eksterntlydutstyr for samtaler, og synkronisere innhold på tvers av dine klienter og enheter.", + "mobile.ios.plist.NSCameraUsageDescription": "Ved å gi tilgang til kameraet ditt kan du ta bilder eller videoer og legge dem ved meldinger.", + "mobile.ios.plist.NSFaceIDUsageDescription": "Aktivering av tilgang til Face ID betyr at vi kan begrense uautoriserte brukere fra å få tilgang til {applicationName} på enheten din.", + "mobile.ios.plist.NSLocationAlwaysUsageDescription": "Å aktivere tilgang til posisjonsdataene dine betyr at vi kan legge til posisjonsmetadata til bilder og videoer du deler i {applicationName}.", + "mobile.ios.plist.NSLocationWhenInUseUsageDescription": "Å aktivere tilgang til posisjonsdataene dine betyr at vi kan legge til posisjonsmetadata til bilder og videoer du deler i {applicationName}.", + "mobile.ios.plist.NSMicrophoneUsageDescription": "Hvis du aktiverer tilgang til enhetens mikrofoner, kan du ta opp lyd for samtaler eller videoer som du kan dele i {applicationName}.", + "mobile.ios.plist.NSPhotoLibraryAddUsageDescription": "Hvis du aktiverer skrivetilgang til bildebiblioteket ditt, kan du lagre nedlastede bilder og videoer fra {applicationName} på enheten din.", + "mobile.ios.plist.NSPhotoLibraryUsageDescription": "Ved å gi tilgang til bildebiblioteket ditt kan du velge bilder eller videoer og legge dem ved meldinger.", + "mobile.ios.plist.NSSpeechRecognitionUsageDescription": "Hvis du aktiverer enheten din til å sende brukerdata til Apple, betyr det at du kan sende talemeldinger til {applicationName}.", + "mobile.join_channel.error": "Vi kunne ikke bli med i kanalen {displayName}.", + "mobile.leave_and_join_confirmation": "Forlat og bli med", + "mobile.leave_and_join_message": "Du er allerede i en kanalsamtale i ~{leaveChannelName}. Vil du forlate den nåværende samtalen og bli med i samtalen i ~{joinChannelName}?", + "mobile.leave_and_join_title": "Er du sikker på at du vil bytte til en annen samtale?", + "mobile.link.error.text": "Kan ikke åpne lenken.", + "mobile.link.error.title": "Feil", + "mobile.login_options.cant_heading": "Får ikke logget på", + "mobile.login_options.enter_credentials": "Skriv inn påloggingsdetaljene dine nedenfor.", + "mobile.login_options.entraid": "Entra ID", + "mobile.login_options.gitlab": "GitLab", + "mobile.login_options.google": "Google", + "mobile.login_options.heading": "Logg inn på kontoen din", + "mobile.login_options.none": "Du kan ikke logge på kontoen din ennå. Minst ett påloggingsalternativ må konfigureres. Kontakt systemadministratoren din for hjelp.", + "mobile.login_options.openid": "Open ID", + "mobile.login_options.saml": "SAML", + "mobile.login_options.select_option": "Velg et påloggingsalternativ nedenfor.", + "mobile.login_options.separator_text": "eller logg inn med", + "mobile.manage_members.admin": "Admin", + "mobile.manage_members.cancel": "Avbryt", + "mobile.manage_members.change_role.error": "Det oppsto en feil under forsøk på å oppdatere rollen. Kontroller tilkoblingen og prøv igjen.", + "mobile.manage_members.done": "Fullført", + "mobile.manage_members.make_channel_admin": "Gjør til kanaladministrator", + "mobile.manage_members.make_channel_member": "Gjør til kanalmedlem", + "mobile.manage_members.manage": "Administrer", + "mobile.manage_members.manage_member": "Administrer medlem", + "mobile.manage_members.member": "Medlem", + "mobile.manage_members.message": "Er du sikker på at du vil fjerne det valgte medlemmet fra kanalen?", + "mobile.manage_members.remove": "Fjern", + "mobile.manage_members.remove_member": "Fjern fra kanal", + "mobile.manage_members.section_title_admins": "KANALADMINISTRATORER", + "mobile.manage_members.section_title_members": "MEDLEMMER", + "mobile.managed.blocked_by": "Blokkert av {vendor}", + "mobile.managed.exit": "Avslutt", + "mobile.managed.not_secured.android": "Denne enheten må sikres med en skjermlås for å bruke Mattermost.", + "mobile.managed.secured_by": "Sikret av {vendor}", + "mobile.managed.settings": "Gå til Innstillinger", + "mobile.markdown.code.copy_code": "Kopier kode", + "mobile.markdown.copy_header": "Kopier overskriftstekst", + "mobile.markdown.image.too_large": "Bildet overskrider maksimal oppløsning på {maxWidth} med {maxHeight}:", + "mobile.markdown.link.copy_url": "Kopier nettadresse", + "mobile.mention.copy_mention": "Kopier omtale", + "mobile.message_length.message": "Din nåværende melding er for lang. Nåværende tegnantall: {count}/{max}", + "mobile.message_length.message_split_left": "Meldingen overskrider tegngrensen", + "mobile.message_length.title": "Meldingslengde", + "mobile.no_results.spelling": "Sjekk stavemåten eller prøv et annet søk.", + "mobile.no_results_with_term": "Ingen resultater for «{term}»", + "mobile.no_results_with_term.files": "Ingen filer samsvarer med «{term}»", + "mobile.no_results_with_term.messages": "Ingen treff funnet for «{term}»", + "mobile.oauth.failed_to_login": "Påloggingsforsøket ditt mislyktes. Vennligst prøv igjen.", + "mobile.oauth.failed_to_open_link": "Lenken kunne ikke åpnes. Vennligst prøv igjen.", + "mobile.oauth.failed_to_open_link_no_browser": "Lenken kunne ikke åpnes. Kontroller at en nettleser er installert på enheten.", + "mobile.oauth.something_wrong.okButton": "Ok", + "mobile.oauth.success.description": "Logger på nå, bare et øyeblikk...", + "mobile.oauth.success.title": "Autentisering vellykket", + "mobile.oauth.switch_to_browser": "Du blir omdirigert til din påloggingsleverandør", + "mobile.oauth.switch_to_browser.error_title": "Påloggingsfeil", + "mobile.oauth.switch_to_browser.title": "Viderekobler...", + "mobile.oauth.try_again": "Forsøk igjen", + "mobile.onboarding.next": "Neste", + "mobile.onboarding.sign_in": "Logg inn", + "mobile.onboarding.sign_in_to_get_started": "Logg på for å komme i gang", + "mobile.open_dm.error": "Vi kunne ikke åpne en direktemelding med {displayName}. Kontroller tilkoblingen og prøv igjen.", + "mobile.open_gm.error": "Vi kunne ikke åpne en gruppemelding med disse brukerne. Kontroller tilkoblingen og prøv igjen.", + "mobile.participants.header": "Deltakere i tråden", + "mobile.permission_denied_dismiss": "Ikke tillat", + "mobile.permission_denied_retry": "Innstillinger", + "mobile.post.cancel": "Avbryt", + "mobile.post.delete_question": "Er du sikker på at du vil slette dette innlegget?", + "mobile.post.delete_title": "Slett innlegg", + "mobile.post.failed_delete": "Slett melding", + "mobile.post.failed_retry": "Prøv igjen", + "mobile.post_info.add_reaction": "Legg til reaksjon", + "mobile.post_info.copy_text": "Kopier tekst", + "mobile.post_info.mark_unread": "Marker som ulest", + "mobile.post_info.pin": "Fest til kanal", + "mobile.post_info.reply": "Svar", + "mobile.post_info.save": "Lagre", + "mobile.post_info.unpin": "Løsne fra kanalen", + "mobile.post_info.unsave": "Opphev lagring", + "mobile.post_pre_header.pinned": "Festet", + "mobile.post_pre_header.pinned_saved": "Festet og lagret", + "mobile.post_pre_header.saved": "Lagret", + "mobile.post_textbox.entire_channel.cancel": "Avbryt", + "mobile.post_textbox.entire_channel.confirm": "Bekreft", + "mobile.post_textbox.entire_channel.title": "Bekreft sending av varsler til hele kanalen", + "mobile.post_textbox.groups.title": "Bekreft sending av varsler til grupper", + "mobile.post_textbox.uploadFailedDesc": "Noen vedlegg kunne ikke lastes opp til serveren. Er du sikker på at du vil legge ut meldingen?", + "mobile.post_textbox.uploadFailedTitle": "Feil ved vedlegg", + "mobile.privacy_link": "Retningslinjer for personvern", + "mobile.push_notification_reply.button": "Send", + "mobile.push_notification_reply.placeholder": "Skriv et svar...", + "mobile.push_notification_reply.title": "Svar", + "mobile.rename_channel.display_name_maxLength": "Kanalnavnet må være mindre enn {maxLength, number} tegn", + "mobile.rename_channel.display_name_minLength": "Kanalnavnet må være {minLength, number} eller flere tegn", + "mobile.rename_channel.display_name_required": "Kanalnavn er obligatorisk", + "mobile.request.invalid_request_method": "Ugyldig forespørselsmetode", + "mobile.request.invalid_response": "Mottok ugyldig svar fra serveren.", + "mobile.reset_status.alert_cancel": "Avbryt", + "mobile.reset_status.alert_ok": "Ok", + "mobile.reset_status.title_ooo": "Vil du deaktivere \"Ute av kontoret\"?", + "mobile.routes.code": "{language} kode", + "mobile.routes.code.noLanguage": "Kode", + "mobile.routes.custom_status": "Angi en egendefinert status", + "mobile.routes.table": "Tabell", + "mobile.routes.user_profile": "Profil", + "mobile.screen.settings": "Valg", + "mobile.screen.your_profile": "Din profil", + "mobile.search.jump": "Gå til de siste meldingene", + "mobile.search.modifier.exclude": "ekskluder søkeord", + "mobile.search.modifier.from": "en bestemt bruker", + "mobile.search.modifier.in": "en bestemt kanal", + "mobile.search.modifier.phrases": "meldinger med fraser", + "mobile.search.show_less": "Vis mindre", + "mobile.search.show_more": "Vis mer", + "mobile.server_identifier.exists": "Du er allerede koblet til denne serveren.", + "mobile.server_link.error.text": "Lenken ble ikke funnet på denne serveren.", + "mobile.server_link.error.title": "Lenkefeil", + "mobile.server_link.unreachable_channel.error": "Denne lenken tilhører en slettet kanal eller til en kanal du ikke har tilgang til.", + "mobile.server_link.unreachable_team.error": "Denne lenken tilhører et slettet team eller et team du ikke har tilgang til.", + "mobile.server_link.unreachable_user.error": "Vi kan ikke omdirigere deg til DM. Brukeren som er spesifisert er ukjent.", + "mobile.server_name.exists": "Du bruker dette navnet for en annen server.", + "mobile.server_ping_failed": "Kan ikke koble til serveren.", + "mobile.server_requires_client_certificate": "Server krever klientsertifikat for autentisering.", + "mobile.server_upgrade.button": "Ok", + "mobile.server_upgrade.title": "Serveroppgradering er påkrevd", + "mobile.server_url.empty": "Vennligst skriv inn en gyldig nettadresse for serveren", + "mobile.server_url.invalid_format": "http:// аль эсвэл https:// гэж эхлэх ёстой", + "mobile.session_expired.title": "Sesjon utløpt", + "mobile.set_status.dnd": "Ikke forstyrr", + "mobile.storage_permission_denied_description": "Last opp filer til serveren din. Åpne Innstillinger for å gi {applicationName} lese- og skrivetilgang til filer på denne enheten.", + "mobile.storage_permission_denied_title": "{applicationName} vil ha tilgang til filene dine", + "mobile.suggestion.members": "Medlemmer", + "mobile.system_message.channel_archived_message": "{username} arkiverte kanalen", + "mobile.system_message.channel_unarchived_message": "{username} opphevet arkiveringen av kanalen", + "mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} oppdaterte kanalvisningsnavnet fra: {oldDisplayName} til: {newDisplayName}", + "mobile.system_message.update_channel_header_message_and_forget.removed": "{username} fjernet kanaloverskriften (var: {oldHeader})", + "mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username} oppdaterte kanaloverskriften fra: {oldHeader} til: {newHeader}", + "mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} oppdaterte kanaloverskriften til: {newHeader}", + "mobile.system_message.update_channel_purpose_message.removed": "{username} fjernet formålet med kanalen (var: {oldPurpose})", + "mobile.system_message.update_channel_purpose_message.updated_from": "{username} oppdaterte formålet med kanalen fra: {oldPurpose} til: {newPurpose}", + "mobile.system_message.update_channel_purpose_message.updated_to": "{username} oppdaterte kanalens formål til: {newPurpose}", + "mobile.tos_link": "Betingelser for bruk", + "mobile.user_list.deactivated": "Deaktivert", + "mobile.write_storage_permission_denied_description": "Lagre filer på enheten din. Åpne Innstillinger for å gi {applicationName} skrivetilgang til filer på enheten.", + "modal.manual_status.auto_responder.message_": "Vil du bytte status til \"{status}\" og deaktivere automatiske svar?", + "modal.manual_status.auto_responder.message_away": "Vil du bytte status til «Borte» og deaktivere automatiske svar?", + "modal.manual_status.auto_responder.message_dnd": "Vil du bytte status til «Ikke forstyrr» og deaktivere automatiske svar?", + "modal.manual_status.auto_responder.message_offline": "Vil du bytte status til \"Frakoblet\" og deaktivere automatiske svar?", + "modal.manual_status.auto_responder.message_online": "Vil du bytte status til \"Pålogget\" og deaktivere automatiske svar?", + "msg_typing.areTyping": "{users} og {last} skriver...", + "msg_typing.isTyping": "{user} skriver ...", + "native.ios.notifications.not_verified": "Vi kunne ikke bekrefte dette varselet med serveren", + "notification.message_not_found": "Melding ikke funnet", + "notification.no_connection": "Serveren er utilgjengelig og det var ikke mulig å hente den spesifikke meldingsinformasjonen for varselet.", + "notification.no_post": "Meldingen er ikke funnet.", + "notification.not_channel_member": "Denne meldingen ble postet i en kanal hvor du ikke er medlem.", + "notification.not_team_member": "Denne meldingen ble postet i et team hvor du ikke er medlem.", + "notification_settings.auto_responder": "Automatiske svar", + "notification_settings.auto_responder.default_message": "Hei, jeg er ute av kontoret og kan ikke svare på meldinger.", + "notification_settings.auto_responder.footer.message": "Sett opp en egendefinert melding som automatisk sendes som svar på direktemeldinger, for eksempel fravær eller feriesvar. Aktivering av denne innstillingen endrer statusen din til Ikke på kontoret og deaktiverer varsler.", + "notification_settings.auto_responder.message": "Melding", + "notification_settings.auto_responder.to.enable": "Aktiver automatiske svar", + "notification_settings.call_notification": "Anropsvarsler", + "notification_settings.calls": "Anropsvarsler", + "notification_settings.calls.callsInfo": "Merk: Stillemodus må være av for å høre forhåndsavspilling av ringetone.", + "notification_settings.calls.calm": "Rolig", + "notification_settings.calls.cheerful": "Munter", + "notification_settings.calls.dynamic": "Dynamisk", + "notification_settings.calls.enable_sound": "Varslingslyd for innkommende samtaler", + "notification_settings.calls.urgent": "Haster", + "notification_settings.calls_off": "Av", + "notification_settings.calls_on": "På", + "notification_settings.email": "Varsler på e-post", + "notification_settings.email.crt.emailInfo": "Når aktivert, vil ethvert svar på en tråd du følger sende et varsel på e-post", + "notification_settings.email.crt.send": "Varsler om trådsvar", + "notification_settings.email.emailHelp2": "E-post har blitt deaktivert av systemadministrator. Ingen varsler på e-post vil bli sendt før det er aktivert.", + "notification_settings.email.emailInfo": "Varsler på e-post sendes for omtaler og direktemeldinger når du er frakoblet eller borte i mer enn 5 minutter.", + "notification_settings.email.everyHour": "Hver time", + "notification_settings.email.fifteenMinutes": "Hvert 15. minutt", + "notification_settings.email.immediately": "Øyeblikkelig", + "notification_settings.email.never": "Aldri", + "notification_settings.email.send": "Send varslinger som e-post", + "notification_settings.mention.reply": "Send svarvarsler for", + "notification_settings.mentions": "Omtaler", + "notification_settings.mentions.channelWide": "Omtaler for hele kanalen", + "notification_settings.mentions.keywords": "Skriv inn andre nøkkelord", + "notification_settings.mentions.keywordsLabel": "Nøkkelord skiller ikke mellom store og små bokstaver. Skill nøkkelordene med komma.", + "notification_settings.mentions.keywords_mention": "Nøkkelord som utløser omtaler", + "notification_settings.mentions_replies": "Omtaler og svar", + "notification_settings.mobile": "Pushvarslinger", + "notification_settings.mobile.away": "Borte eller avlogget", + "notification_settings.mobile.offline": "Frakoblet", + "notification_settings.mobile.online": "På nett, borte eller frakoblet", + "notification_settings.mobile.trigger_push": "Utløs push-varsler når...", + "notification_settings.ooo_auto_responder": "Automatiske svar", + "notification_settings.pushNotification.all_new_messages": "Alle nye meldinger", + "notification_settings.pushNotification.disabled_long": "Pushvarsler for mobile enheter har blitt deaktivert av systemadministratoren.", + "notification_settings.pushNotification.mentions_only": "Bare for omtaler, direktemeldinger og gruppemeldinger (standard)", + "notification_settings.pushNotification.nothing": "Ingenting", + "notification_settings.push_notification": "Push-varsler", + "notification_settings.push_threads.following": "Varsle meg om svar på tråder jeg følger i denne kanalen", + "notification_settings.push_threads.replies": "Trådsvar", + "notification_settings.send_notification.about": "Gi meg beskjed om...", + "notification_settings.threads_mentions": "Omtaler i tråder", + "notification_settings.threads_start": "Tråder som jeg starter", + "notification_settings.threads_start_participate": "Tråder som jeg starter eller deltar i", + "onboarding.calls": "Start sikre lydsamtaler øyeblikkelig", + "onboarding.calls_description": "Når skrivingen ikke er rask nok, bytt fra kanalbasert chat til sikre lydanrop med ett enkelt trykk.", + "onboarding.integrations": "Integrer med verktøy du liker", + "onboarding.integrations_description": "Gjør mer enn bare chat med tett integrerte produktløsninger tilpasset vanlige utviklingsprosesser.", + "onboarding.realtime_collaboration": "Samarbeid i sanntid", + "onboarding.realtime_collaboration_description": "Vedvarende kanaler, direktemeldinger og fildeling fungerer sømløst slik at du kan holde kontakten, uansett hvor du er.", + "onboarding.welcome": "Velkommen", + "onboaring.welcome_description": "Mattermost er en åpen kildekode-plattform for utviklersamarbeid. Sikker, fleksibel og integrert med verktøyene dine.", + "password_send.description": "For å tilbakestille passordet ditt, skriv inn e-postadressen du brukte da du registrerte deg", + "password_send.error": "Vennligst skriv inn en gyldig e-post adresse.", + "password_send.generic_error": "Vi kunne ikke sende deg en kobling for tilbakestilling av passord. Kontakt din systemadministratoren for å få hjelp.", + "password_send.link": "Hvis kontoen eksisterer, vil en e-post med tilbakestilling av passord bli sendt til:", + "password_send.link.title": "Tilbakestillingslenke sendt", + "password_send.reset": "Tilbakestill ditt passord", + "password_send.return": "Gå tilbake til Pålogging", + "permalink.error.access.text": "Meldingen du prøver å se er i en kanal du ikke har tilgang til eller som har blitt slettet.", + "permalink.error.access.title": "Meldingen kan ikke vises", + "permalink.error.cancel": "Avbryt", + "permalink.error.okay": "Ok", + "permalink.error.private_channel.button": "Bli med i kanalen", + "permalink.error.private_channel.text": "Meldingen du prøver å se er i en privat kanal du ikke har blitt invitert til, men du har tilgang som administrator. Vil du fortsatt bli med i **{channelName}**?", + "permalink.error.private_channel.title": "Bli med i den private kanalen", + "permalink.error.private_channel_and_team.button": "Bli med i kanalen og teamet", + "permalink.error.private_channel_and_team.text": "Meldingen du prøver å se er i en privat kanal i et team du ikke er medlem av. Du har tilgang som administrator. Vil du bli med **{channelName}** og **{teamName}**-teamet for å se det?", + "permalink.error.private_channel_and_team.title": "Bli med i den private kanalen og teamet", + "permalink.error.public_channel.button": "Bli med i kanalen", + "permalink.error.public_channel.text": "Meldingen du prøver å se er i en kanal du ikke er medlem av. Vil du bli med i **{channelName}** for å se den?", + "permalink.error.public_channel.title": "Bli med i kanal", + "permalink.error.public_channel_and_team.button": "Bli med i kanalen og laget", + "permalink.error.public_channel_and_team.text": "Meldingen du prøver å se er i en kanal i et team du ikke er medlem av. Vil du bli med **{channelName}** og **{teamName}**-teamet for å se det?", + "permalink.error.public_channel_and_team.title": "Bli med i kanalen og teamet", + "permalink.show_dialog_warn.cancel": "Avbryt", + "permalink.show_dialog_warn.description": "Du er i ferd med å bli med i {channel} uten eksplisitt å ha blitt lagt til av kanaladministratoren. Er du sikker på at du vil bli med i denne private kanalen?", + "permalink.show_dialog_warn.join": "Bli med", + "permalink.show_dialog_warn.title": "Bli med på privat kanal", + "persistent_notifications.confirm.cancel": "Avbryt", + "persistent_notifications.confirm.description": "Nevnte mottakere vil bli varslet hvert {interval, plural, one {minute} other {{interval} minutes}} til de har bekreftet eller svart på meldingen.", + "persistent_notifications.confirm.send": "Send", + "persistent_notifications.confirm.title": "Send vedvarende varsler", + "persistent_notifications.dm_channel.description": "{username} vil bli varslet hvert {intervall, plural, one {minute} other {{interval} minutes}} til de har bekreftet eller svart på meldingen.", + "persistent_notifications.error.max_recipients.description": "Du kan sende vedvarende varsler til maksimalt {max} mottakere. Det er {count} mottakere nevnt i meldingen din. Du må endre hvem du har nevnt før du kan sende.", + "persistent_notifications.error.max_recipients.title": "For mange mottakere", + "persistent_notifications.error.no_mentions.description": "Det er ingen mottakere nevnt i meldingen din. Du må legge til omtaler for å kunne sende vedvarende varsler.", + "persistent_notifications.error.no_mentions.title": "Mottakere må @nevnes", + "persistent_notifications.error.okay": "Ok", + "persistent_notifications.error.special_mentions": "Kan ikke bruke @channel, @all eller @here for å nevne mottakere av vedvarende varsler.", + "pinned_messages.empty.paragraph": "For å feste viktige meldinger, trykk lenge på en melding og velg Fest til kanal. Festede meldinger vil være synlige for alle på denne kanalen.", + "pinned_messages.empty.title": "Ingen festede meldinger ennå", + "plus_menu.browse_channels.title": "Bla gjennom kanaler", + "plus_menu.create_new_channel.title": "Opprett ny kanal", + "plus_menu.invite_people_to_team.title": "Inviter personer til teamet", + "plus_menu.open_direct_message.title": "Åpne en direktemelding", + "post.options.title": "Valg", + "post.reactions.title": "Reaksjoner", + "postList.scrollToBottom.newMessages": "Nye meldinger", + "postList.scrollToBottom.newReplies": "Nye svar", + "post_body.check_for_out_of_channel_groups_mentions.message": "ble ikke varslet av denne omtalen fordi de ikke er i kanalen. De er heller ikke medlem av gruppene som er knyttet til denne kanalen.", + "post_body.check_for_out_of_channel_mentions.link.and": " and ", + "post_body.check_for_out_of_channel_mentions.link.private": "legg dem til denne private kanalen", + "post_body.check_for_out_of_channel_mentions.link.public": "legge dem til kanalen", + "post_body.check_for_out_of_channel_mentions.message.multiple": "ble nevnt, men de er ikke i kanalen. Vil du ", + "post_body.check_for_out_of_channel_mentions.message.one": "ble nevnt, men er ikke i kanalen. Vil du ", + "post_body.check_for_out_of_channel_mentions.message_last": "? De vil ha tilgang til all meldingshistorikk.", + "post_body.commentedOn": "Kommenterte {name}{apostrophe}-meldingen: ", + "post_body.deleted": "(melding slettet)", + "post_info.auto_responder": "Automatisk svar", + "post_info.bot": "Bot", + "post_info.del": "Slett", + "post_info.edit": "Rediger", + "post_info.guest": "Gjest", + "post_info.system": "System", + "post_message_view.edited": "(redigert)", + "post_priority.button.acknowledge": "Anerkjenne", + "post_priority.label.important": "VIKTIG", + "post_priority.label.urgent": "HASTER", + "post_priority.picker.apply": "Bruk", + "post_priority.picker.beta": "BETA", + "post_priority.picker.cancel": "Avbryt", + "post_priority.picker.label.important": "Viktig", + "post_priority.picker.label.persistent_notifications": "Send vedvarende varsler", + "post_priority.picker.label.persistent_notifications.description": "Mottakere blir varslet hvert {interval, plural, one {minute} other {{interval} minutes}}{interval} til de bekrefter eller svarer.", + "post_priority.picker.label.request_ack": "Be om bekreftelse", + "post_priority.picker.label.request_ack.description": "En bekreftelsesknapp vises sammen med meldingen", + "post_priority.picker.label.standard": "Standard", + "post_priority.picker.label.urgent": "Haster", + "post_priority.picker.title": "Meldingsprioritet", + "posts_view.newMsg": "Nye meldinger", + "public_link_copied": "Lenken er kopiert til utklippstavlen", + "rate.button.needs_work": "Trenger arbeid", + "rate.button.yes": "Elsker det!", + "rate.dont_ask_again": "Ikke spør meg igjen", + "rate.error.text": "Det har oppstått en feil under åpning av vurderingsmodalen.", + "rate.error.title": "Feil", + "rate.subtitle": "Fortell oss hva du synes.", + "rate.title": "Liker du Mattermost?", + "requested_ack.title": "Be om anerkjennelser", + "saved_messages.empty.paragraph": "For å lagre noe til senere, trykk lenge på en melding og velg Lagre fra menyen. Lagrede meldinger er bare synlige for deg.", + "saved_messages.empty.title": "Ingen lagrede meldinger ennå", + "screen.channel_files.header.recent_files": "Siste filer", + "screen.channel_files.results.filter.title": "Filtrer etter filtype", + "screen.mentions.subtitle": "Meldinger du er nevnt i", + "screen.mentions.title": "Nylige omtaler", + "screen.saved_messages.subtitle": "Alle meldinger du har lagret for oppfølging", + "screen.saved_messages.title": "Lagrede meldinger", + "screen.search.header.files": "Filer", + "screen.search.header.messages": "Meldinger", + "screen.search.modifier.header": "Søkealternativer", + "screen.search.placeholder": "Søk etter meldinger og filer", + "screen.search.results.file_options.copy_link": "Kopier lenke", + "screen.search.results.file_options.download": "Last ned", + "screen.search.results.file_options.open_in_channel": "Åpne i kanal", + "screen.search.results.filter.all_file_types": "Alle filtyper", + "screen.search.results.filter.audio": "Lyd", + "screen.search.results.filter.code": "Kode", + "screen.search.results.filter.documents": "Dokumenter", + "screen.search.results.filter.images": "Bilder", + "screen.search.results.filter.presentations": "Presentasjoner", + "screen.search.results.filter.spreadsheets": "Regneark", + "screen.search.results.filter.title": "Filtrer etter filtype", + "screen.search.results.filter.videos": "Videoer", + "screen.search.title": "Søk", + "screens.channel_bookmark_add": "Legg til et bokmerke", + "screens.channel_bookmark_edit": "Rediger bokmerke", + "screens.channel_edit": "Rediger kanal", + "screens.channel_edit_header": "Rediger kanaloverskrift", + "screens.channel_info": "Kanal info", + "screens.channel_info.dm": "Direktemelding info", + "screens.channel_info.gm": "Gruppemelding info", + "search_bar.search": "Søk", + "search_bar.search.placeholder": "Søk etter tidssone", + "select_team.description": "Du er ennå ikke medlem av noe team. Velg et nedenfor for å komme i gang.", + "select_team.no_team.description": "For å bli med i et team, spør en teamadministrator om en invitasjon, eller lag ditt eget team. Det kan også være lurt å sjekke e-postinnboksen for en invitasjon.", + "select_team.no_team.title": "Ingen team er tilgjengelige for å bli med i", + "select_team.title": "Velg et team", + "server.invalid.certificate.title": "Ugyldig SSL-sertifikat", + "server.invalid.pinning.title": "Ugyldig festet SSL-sertifikat", + "server.logout.alert_description": "Alle tilknyttede data vil bli fjernet", + "server.logout.alert_title": "Er du sikker på at du vil logge ut av {displayName}?", + "server.remove.alert_description": "Dette vil fjerne den fra listen over servere. Alle tilknyttede data vil bli slettet", + "server.remove.alert_title": "Er du sikker på at du vil fjerne {displayName}?", + "server.tutorial.swipe": "Sveip til venstre på en server for å se flere handlinger", + "server.websocket.unreachable": "Serveren er utilgjengelig.", + "server_list.push_proxy_error": "Varsler kan ikke mottas fra denne serveren på grunn av dens konfigurasjon. Kontakt systemadministratoren din.", + "server_list.push_proxy_unknown": "Varsler kunne ikke mottas fra denne serveren på grunn av dens konfigurasjon. Logg ut og logg på igjen for å prøve på nytt.", + "server_upgrade.alert_description": "Serveren din, {serverDisplayName}, kjører en serverversjon som ikke støttes. Brukere vil bli utsatt for kompatibilitetsproblemer som forårsaker krasj eller alvorlige feil som bryter kjernefunksjonaliteten til appen. Oppgradering til serverversjon {supportedServerVersion} eller nyere er nødvendig.", + "server_upgrade.dismiss": "Avvis", + "server_upgrade.learn_more": "Lær mer", + "servers.create_button": "Legg til en server", + "servers.default": "Standard server", + "servers.edit": "Rediger", + "servers.login": "Logg på", + "servers.logout": "Logg ut", + "servers.remove": "Fjern", + "settings.about": "Om {appTitle}", + "settings.about.app.version": "Appversjon: {version} (Build {number})", + "settings.about.app.version.title": "Appversjon:", + "settings.about.app.version.value": "{version} (Build {number})", + "settings.about.button.copyInfo": "Kopier info", + "settings.about.copyright": "Copyright 2015-{currentYear} Mattermost, Inc. Alle rettigheter forbeholdt", + "settings.about.database": "Database: {driverName}", + "settings.about.database.schema": "Databaseskjemaversjon: {version}", + "settings.about.database.schema.title": "Databaseskjemaversjon:", + "settings.about.database.title": "Database:", + "settings.about.licensed": "Lisensiert til: {company}", + "settings.about.powered_by": "{site} er drevet av Mattermost", + "settings.about.server.version": "Serverversjon: {version} (Build {buildNumber}", + "settings.about.server.version.noBuild": "Serverversjon: {version}", + "settings.about.server.version.title": "Serverversjon:", + "settings.about.server.version.value": "{version} (Build {buildnumber})", + "settings.advanced.cancel": "Avbryt", + "settings.advanced.delete": "Slett", + "settings.advanced.delete_data": "Slett lokale filer", + "settings.advanced.delete_message.confirmation": "\nDette vil slette alle filer som er lastet ned gjennom appen for denne serveren. Vennligst bekreft for å fortsette.\n", + "settings.advanced_settings": "Avanserte innstillinger", + "settings.display": "Visning", + "settings.link.error.text": "Kan ikke åpne lenken.", + "settings.link.error.title": "Feil", + "settings.notice_mobile_link": "mobilapper", + "settings.notice_platform_link": "server", + "settings.notice_text": "Mattermost er muliggjort av åpen kildekode-programvare som brukes i vår {platform} og {mobile}.", + "settings.notifications": "Varsler", + "settings.save": "Lagre", + "settings_display.clock.mz": "24-timers klokke", + "settings_display.clock.mz.desc": "Eksempel: 16:00", + "settings_display.clock.normal.desc": "Eksempel: 4:00 PM", + "settings_display.clock.standard": "12-timers klokke", + "settings_display.crt.desc": "Når aktivert, vises ikke svarmeldinger i kanalen, og du vil bli varslet om tråder du følger i «Tråder»-visningen.", + "settings_display.crt.label": "Skjulte svartråder", + "settings_display.custom_theme": "Egendefinert drakt", + "settings_display.timezone.automatically": "Still inn automatisk", + "settings_display.timezone.manual": "Endre tidssone", + "settings_display.timezone.off": "Av", + "settings_display.timezone.select": "Velg tidssone", + "share_extension.channel_error": "Du er ikke medlem av et team på den valgte serveren. Velg en annen server eller åpne Mattermost for å bli med i et team.", + "share_extension.channel_label": "Kanal", + "share_extension.channels_screen.title": "Velg kanal", + "share_extension.count_limit": "Du kan bare dele {count, number} {count, plural, one {file} other {files}} på denne serveren", + "share_extension.error_screen.description": "Det oppsto en feil ved forsøk på å dele innholdet med {applicationName}.", + "share_extension.error_screen.label": "En feil oppstod", + "share_extension.error_screen.reason": "Årsak: {reason}", + "share_extension.file_limit.multiple": "Hver fil må være mindre enn {size}", + "share_extension.file_limit.single": "Filen må være mindre enn {size}", + "share_extension.max_resolution": "Bildet overskrider maksimal oppløsning på 7680 x 4320 piksler", + "share_extension.message": "Skriv inn en melding (valgfritt)", + "share_extension.multiple_label": "{count, number} vedlegg", + "share_extension.server_label": "Server", + "share_extension.servers_screen.title": "Velg server", + "share_extension.share_screen.title": "Del med {applicationName}", + "share_extension.upload_disabled": "Filopplasting er deaktivert for den valgte serveren", + "share_feedback.button.no": "Nei takk", + "share_feedback.button.yes": "Ja", + "share_feedback.subtitle": "Vi vil gjerne høre hvordan vi kan gjøre opplevelsen din bedre.", + "share_feedback.title": "Vil du dele tilbakemeldingen din?", + "skintone_selector.tooltip.description": "Du kan nå velge hudtonen du foretrekker å bruke for emojiene dine.", + "skintone_selector.tooltip.title": "Velg din standard hudtone", + "smobile.search.recent_title": "Nylige søk i {teamName}", + "snack.bar.channel.members.added": "{numMembers, number} {numMembers, plural, one {member} other {members}} lagt til", + "snack.bar.favorited.channel": "Denne kanalen ble satt som favoritt", + "snack.bar.following.thread": "Tråd ble fulgt", + "snack.bar.info.copied": "Info kopiert til utklippstavle", + "snack.bar.link.copied": "Lenke kopiert til utklippstavle", + "snack.bar.message.copied": "Tekst kopiert til utklippstavle", + "snack.bar.mute.channel": "Denne kanalen ble dempet", + "snack.bar.remove.user": "1 medlem ble fjernet fra kanalen", + "snack.bar.text.copied": "Kopiert til utklippstavle", + "snack.bar.undo": "Angre", + "snack.bar.unfavorite.channel": "Denne kanalen ble avfavorisert", + "snack.bar.unfollow.thread": "Tråden ble sluttet å følge", + "snack.bar.unmute.channel": "Demping av kanalen ble deaktivert", + "status_dropdown.set_away": "Borte", + "status_dropdown.set_dnd": "Ikke forstyrr", + "status_dropdown.set_offline": "Avlogget", + "status_dropdown.set_online": "På nett", + "status_dropdown.set_ooo": "Ikke på kontoret", + "suggestion.mention.all": "Varsler alle i denne kanalen", + "suggestion.mention.channel": "Varsler alle i denne kanalen", + "suggestion.mention.channels": "Mine kanaler", + "suggestion.mention.groups": "Gruppeomtaler", + "suggestion.mention.here": "Varsler alle som er på nett i denne kanalen", + "suggestion.mention.morechannels": "Andre kanaler", + "suggestion.mention.nonmembers": "Ikke i kanalen", + "suggestion.mention.special": "Spesielle omtaler", + "suggestion.mention.users": "Brukere", + "suggestion.search.direct": "Direktemeldinger", + "suggestion.search.private": "Private kanaler", + "suggestion.search.public": "Åpne kanaler", + "system_notice.dont_show": "Ikke vis igjen", + "system_notice.remind_me": "Påminn meg senere", + "system_notice.title.gm_as_dm": "Oppdateringer til gruppemeldinger", + "system_noticy.body.gm_as_dm": "Du vil nå bli varslet for all aktivitet i gruppemeldingene dine sammen med et varslingsmerke for hver ny melding.\n\nDu kan konfigurere dette i varselinnstillingene for hver gruppemelding.", + "team_list.no_other_teams.description": "For å bli med i et annet team, spør en teamadministrator om en invitasjon, eller lag ditt eget team.", + "team_list.no_other_teams.title": "Ingen flere team å være med i", + "terms_of_service.acceptButton": "Aksepter", + "terms_of_service.alert_cancel": "Avbryt", + "terms_of_service.alert_retry": "Prøv igjen", + "terms_of_service.api_error": "Kan ikke fullføre forespørselen. Kontakt systemadministratoren hvis dette problemet vedvarer.", + "terms_of_service.decline": "Avslå", + "terms_of_service.error.description": "Det var ikke mulig å få vilkårene for bruk fra serveren.", + "terms_of_service.error.logout": "Logg ut", + "terms_of_service.error.retry": "Prøv på nytt", + "terms_of_service.error.title": "Kunne ikke hente tjenestevilkårene.", + "terms_of_service.terms_declined.ok": "Ok", + "terms_of_service.terms_declined.text": "Du må godta vilkårene for bruk for å få tilgang til denne serveren. Ta kontakt med systemadministratoren for mer informasjon. Du vil nå bli logget ut. Logg på igjen for å godta vilkårene for bruk.", + "terms_of_service.terms_declined.title": "Du må godta tjenestevilkårene", + "terms_of_service.title": "Tjenestevilkårene", + "thread.header.thread": "Tråd", + "thread.header.thread_in": "i {channelName}", + "thread.loadingReplies": "Laster inn svar...", + "thread.noReplies": "Ingen svar ennå", + "thread.options.title": "Tråd handlinger", + "thread.repliesCount": "{repliesCount, number} {repliesCount, plural, one {reply} other {replies}}", + "threads": "Tråder", + "threads.deleted": "Opprinnelig melding slettet", + "threads.end_of_list.subtitle": "Hvis du ser etter eldre samtaler, prøv å søke i stedet", + "threads.end_of_list.title": "Det er slutten av listen!", + "threads.follow": "Følg", + "threads.followMessage": "Følg melding", + "threads.followThread": "Følg tråd", + "threads.following": "Følger", + "threads.newReplies": "{count} ny {count, plural, one {reply} other {replies}}", + "threads.replies": "{count} {count, plural, one {reply} other {replies}}", + "threads.unfollowMessage": "Ikke følg melding", + "threads.unfollowThread": "Ikke følg tråd", + "unreads.empty.paragraph": "Slå av ulest filteret for å vise alle kanalene dine.", + "unreads.empty.show_all": "Vis all", + "unreads.empty.title": "Ingen flere uleste", + "unsupported_server.message": "Serveren din, {serverDisplayName}, kjører en serverversjon som ikke støttes. Du kan oppleve kompatibilitetsproblemer som forårsaker krasjer eller alvorlige feil som bryter kjernefunksjonaliteten til appen. Ta kontakt med systemadministratoren din for å oppgradere din Mattermost-server.", + "unsupported_server.title": "Ustøttet serverversjon", + "user.edit_profile.email.auth_service": "Innlogging skjer gjennom {service}. E-post kan ikke oppdateres. E-postadressen som brukes for varsler er {email}.", + "user.edit_profile.email.web_client": "E-post må oppdateres ved hjelp av en nettklient eller desktop applikasjon.", + "user.edit_profile.profile_photo.change_photo": "Bytt profilbilde", + "user.settings.general.email": "E-post", + "user.settings.general.field_handled_externally": "Noen felt nedenfor håndteres gjennom din påloggingsleverandør. Hvis du vil endre dem, må du gjøre det via påloggingsleverandøren din.", + "user.settings.general.firstName": "Fornavn", + "user.settings.general.lastName": "Etternavn", + "user.settings.general.nickname": "Kallenavn", + "user.settings.general.position": "Stilling", + "user.settings.general.username": "Brukernavn", + "user.settings.notifications.email_threads.description": "Varsle meg om alle svar til tråder jeg følger", + "user.tutorial.long_press": "Trykk lenge på et element for å se en brukers profil", + "user_profile.custom_status": "Egendefinert status", + "user_status.away": "Borte", + "user_status.dnd": "Ikke forstyrr", + "user_status.offline": "Frakoblet", + "user_status.online": "På nett", + "user_status.title": "E-post", + "video.download": "Last ned video", + "video.download_description": "Denne videoen må lastes ned for å kunne spille den av.", + "video.failed_description": "Det oppsto en feil under forsøk på å spille av videoen.", + "your.servers": "Dine servere" } diff --git a/assets/base/i18n/nl.json b/assets/base/i18n/nl.json index d3484e265a1..01d6f662146 100644 --- a/assets/base/i18n/nl.json +++ b/assets/base/i18n/nl.json @@ -96,6 +96,28 @@ "camera_type.video.option": "Neem video op", "center_panel.archived.closeChannel": "Kanaal sluiten", "channel_add_members.add_members.button": "Voeg leden toe", + "channel_bookmark.add.detail_title": "Titel", + "channel_bookmark.add.emoji": "Emoji toevoegen", + "channel_bookmark.add.failed_title": "Fout bij toevoegen bladwijzer", + "channel_bookmark.add.file_cancel": "Annuleren", + "channel_bookmark.add.file_title": "Bijlage", + "channel_bookmark.add.file_upload_error": "Fout bij het uploaden van bestand. Probeer het opnieuw.", + "channel_bookmark.add.file_uploading": "Uploaden... ({progress}%)", + "channel_bookmark.add_edit.failed_desc": "Details: {error}", + "channel_bookmark.copy_option": "Link kopiëren", + "channel_bookmark.delete.confirm": "Weet je zeker dat je de bladwijzer {displayName} wil verwijderen?", + "channel_bookmark.delete.confirm_title": "Bladwijzer verwijderen", + "channel_bookmark.delete.failed_detail": "Details: {error}", + "channel_bookmark.delete.failed_title": "Fout bij het verwijderen van bladwijzer", + "channel_bookmark.delete.yes": "Ja", + "channel_bookmark.delete_option": "Verwijderen", + "channel_bookmark.edit.failed_title": "Fout bij het bewerken van bladwijzer", + "channel_bookmark.edit.save_button": "Bewaren", + "channel_bookmark.edit_option": "Bewerken", + "channel_bookmark.share_option": "Delen", + "channel_bookmark_add.link": "Link", + "channel_bookmark_add.link.input.description": "Voeg een link toe aan een bericht, bestand of externe link", + "channel_bookmark_add.link.invalid": "Voer een geldige link in", "channel_files.empty.paragraph": "Bestanden geplaatst in dit kanaal worden hier getoond.", "channel_files.empty.title": "Nog geen bestanden", "channel_files.noFiles.paragraph": "Dit kanaal bevat geen bestanden met de toegepaste filters", @@ -103,6 +125,10 @@ "channel_header.directchannel.you": "{displayName} (jijzelf)", "channel_header.info": "Bekijk info", "channel_header.member_count": "{count, plural, one {# lid} other {# leden}}", + "channel_info.add_bookmark": "Een bladwijzer toevoegen", + "channel_info.add_bookmark.file": "Een bestand bijvoegen", + "channel_info.add_bookmark.link": "Een link toevoegen", + "channel_info.add_bookmark.max_reached": "Dit kanaal heeft het maximale aantal bladwijzers bereikt.", "channel_info.add_members": "Voeg leden toe", "channel_info.alertNo": "Nee", "channel_info.alertYes": "Ja", @@ -445,9 +471,9 @@ "mobile.calls_call_ended": "Oproep beëindigd", "mobile.calls_call_screen": "Calls", "mobile.calls_call_thread": "Call-draadje", + "mobile.calls_cancel": "Annuleren", "mobile.calls_captions": "Ondertiteling", "mobile.calls_captions_turned_on": "Live ondertiteling ingeschakeld", - "mobile.calls_current_call": "Huidige oproep", "mobile.calls_disable": "Oproepen uitschakelen", "mobile.calls_dismiss": "Afwijzen", "mobile.calls_enable": "Oproepen inschakelen", @@ -460,21 +486,32 @@ "mobile.calls_ended_at": "Beëindigd op", "mobile.calls_error_message": "Fout: {error}", "mobile.calls_error_title": "Fout", + "mobile.calls_group_calls_not_available": "Gesprekken zijn alleen beschikbaar in DM-kanalen.", "mobile.calls_headset": "Hoofdtelefoon", "mobile.calls_hide_cc": "Live ondertiteling verbergen", "mobile.calls_host": "gastheer", "mobile.calls_host_controls": "Bedieningselementen host", + "mobile.calls_host_end_confirm": "Gesprek beëindigen voor iedereen", + "mobile.calls_host_leave_confirm": "Gesprek verlaten", + "mobile.calls_host_leave_title": "Weet je zeker dat je dit gesprek wil verlaten?", "mobile.calls_host_rec": "Je neemt deze vergadering op. Laat iedereen weten dat deze vergadering wordt opgenomen.", "mobile.calls_host_rec_error": "Probeer opnieuw op te nemen. Je kan ook contact opnemen met jouuw systeembeheerder voor hulp bij het oplossen van problemen.", "mobile.calls_host_rec_error_title": "Er ging iets mis met de opname", + "mobile.calls_host_rec_stop_body": "De gespreksopname wordt verwerkt en in de gespreksdraadje geplaatst. Weet je zeker dat je de opname wil stoppen?", + "mobile.calls_host_rec_stop_confirm": "Opname stoppen", + "mobile.calls_host_rec_stop_title": "Opname stoppen", "mobile.calls_host_rec_stopped": "Je kan de opname vinden in de chatdraadje van dit gesprek zodra het verwerkt is.", "mobile.calls_host_rec_stopped_title": "De opname is gestopt. Verwerking gestart...", "mobile.calls_host_rec_title": "Je bent aan het opnemen", + "mobile.calls_host_rec_trans_stop_body": "De opname- en transcriptiebestanden van het gesprek worden verwerkt en in de gespreksdraadje geplaatst. Weet je zeker dat je de opname en transcriptie wilt stoppen?", + "mobile.calls_host_rec_trans_stop_title": "Opname en transcriptie stoppen", "mobile.calls_host_transcription": "Overweeg om iedereen te laten weten dat deze vergadering wordt opgenomen en er een transcriptie gemaakt wordt.", "mobile.calls_host_transcription_title": "Opname en transcriptie is begonnen", "mobile.calls_incoming_dm": "{name} nodigt je uit voor een gesprek", "mobile.calls_incoming_gm": "{name} nodigt je uit voor een gesprek met {num, plural, one {# other} other {# others}} ", + "mobile.calls_join": "Deelnemen", "mobile.calls_join_call": "Deelnemen aan oproep", + "mobile.calls_joining": "Bezig met aan te sluiten...", "mobile.calls_lasted": "Duurde {duration}", "mobile.calls_leave": "Verlaten", "mobile.calls_leave_call": "Gesprek verlaten", @@ -489,7 +526,6 @@ "mobile.calls_mute_others": "Alle anderen dempen", "mobile.calls_mute_participant": "Deelnemer dempen", "mobile.calls_name_is_talking_postfix": "spreekt…", - "mobile.calls_name_started_call": "{name} is een oproep begonnen", "mobile.calls_noone_talking": "Er is niemand aan het praten", "mobile.calls_not_available_msg": "Neem contact op met jouw systeembeheerder om deze functie in te schakelen.", "mobile.calls_not_available_option": "(Niet beschikbaar)", @@ -510,7 +546,6 @@ "mobile.calls_raise_hand": "Handje opsteken", "mobile.calls_raised_hand": "{name} {num, plural, =0 {stak} other {+# meer staken }} een handje op", "mobile.calls_react": "Reageren", - "mobile.calls_rec": "Opnemen", "mobile.calls_record": "Opnemen", "mobile.calls_recording_start_in_progress": "Er is al een opname bezig.", "mobile.calls_recording_start_no_permissions": "Je hebt geen rechten om een opname te starten. Vraag de gesprekshost om een opname te starten.", @@ -529,6 +564,8 @@ "mobile.calls_speaker": "Spreker", "mobile.calls_start_call": "Oproep starten", "mobile.calls_start_call_exists": "Er is al een gesprek gaande in het kanaal.", + "mobile.calls_started_call": "Oproep gestart", + "mobile.calls_starting": "Startend....", "mobile.calls_stop_recording": "Opname stoppen", "mobile.calls_stop_screenshare": "Scherm delen stoppen", "mobile.calls_tablet": "Tablet", @@ -620,11 +657,11 @@ "mobile.link.error.title": "Fout", "mobile.login_options.cant_heading": "Kan niet aanmelden", "mobile.login_options.enter_credentials": "Vul hieronder jouw aanmeldgegevens in.", + "mobile.login_options.entraid": "Entra ID", "mobile.login_options.gitlab": "Gitlab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "Aanmelden op jouw account", "mobile.login_options.none": "Je kan nog niet inloggen op jouw account. Er moet minstens één inlogmogelijkheid geconfigureerd zijn. Neem contact op met jouw systeembeheerder voor hulp.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Selecteer hieronder een aanmeldingsoptie.", @@ -645,9 +682,7 @@ "mobile.manage_members.section_title_members": "LEDEN", "mobile.managed.blocked_by": "Geblokkeerd door {vendor}", "mobile.managed.exit": "Afsluiten", - "mobile.managed.jailbreak": "Jailbroken toestellen worden niet vertrouwd door {vendor}.\n\nReden {reason}\n\n\n\nDebug info: {debug}\n\nSluit de app af.", - "mobile.managed.jailbreak_no_debug_info": "Niet beschikbaar", - "mobile.managed.jailbreak_no_reason": "Niet beschikbaar", + "mobile.managed.jailbreak": "Jailbroken toestellen worden niet vertrouwd door {vendor}.\n\nDe app gaat nu afsluiten.", "mobile.managed.not_secured.android": "Dit apparaat moet eerst beveiligd worden met een schermvergrendeling, zodat je Mattermost kunt gebruiken.", "mobile.managed.not_secured.ios": "Dit apparaat moet worden beveiligd met een toegangscode om Mattermost te gebruiken.\n\nGa naar Instellingen > Biometrie en wachtwoord.", "mobile.managed.not_secured.ios.touchId": "Dit apparaat moet worden beveiligd met een toegangscode om Mattermost te gebruiken.\n\nGa naar Instellingen > Vingerafruk-id en wachtwoord.", @@ -667,10 +702,11 @@ "mobile.no_results_with_term.files": "Geen bestanden die overeenkomen met \"{term}\"", "mobile.no_results_with_term.messages": "Geen resultaten gevonden voor \"{term}\"", "mobile.oauth.failed_to_login": "Jouw aanmeldingspoging is mislukt. Probeer het opnieuw.", - "mobile.oauth.failed_to_open_link": "De link is niet geopend. Probeer het opnieuw.", + "mobile.oauth.failed_to_open_link": "De link kon niet worden geopend. Probeer het opnieuw.", "mobile.oauth.failed_to_open_link_no_browser": "De link kon niet worden geopend. Controleer of er een browser is geïnstalleerd op het apparaat.", - "mobile.oauth.something_wrong": "Er ging iets mis", "mobile.oauth.something_wrong.okButton": "OK", + "mobile.oauth.success.description": "Bezig met aanmelden, even geduld...", + "mobile.oauth.success.title": "Authenticatie geslaagd", "mobile.oauth.switch_to_browser": "Je wordt doorverwezen naar jouw aanmeldingsprovider", "mobile.oauth.switch_to_browser.error_title": "Fout bij aanmelden", "mobile.oauth.switch_to_browser.title": "Omleiden...", @@ -791,6 +827,16 @@ "notification_settings.auto_responder.footer.message": "Stel een aangepast bericht in dat automatisch wordt verzonden in antwoord op privé-berichten, zoals een antwoord wegens afwezigheid of vakantie. Als u deze instelling inschakelt, verandert jouw status in Out of Office en worden meldingen uitgeschakeld.", "notification_settings.auto_responder.message": "Bericht", "notification_settings.auto_responder.to.enable": "Automatische antwoorden inschakelen", + "notification_settings.call_notification": "Meldingen voor Calls", + "notification_settings.calls": "Meldingen voor Calls", + "notification_settings.calls.callsInfo": "Opmerking: stille modus moet uit staan om het voorbeeld van de beltoon te horen.", + "notification_settings.calls.calm": "Kalm", + "notification_settings.calls.cheerful": "Vrolijk", + "notification_settings.calls.dynamic": "Dynamisch", + "notification_settings.calls.enable_sound": "Meldingsgeluid voor inkomende gesprekken", + "notification_settings.calls.urgent": "Dringend", + "notification_settings.calls_off": "Uit", + "notification_settings.calls_on": "Ingeschakeld", "notification_settings.email": "E-mailmeldingen", "notification_settings.email.crt.emailInfo": "Indien ingeschakeld, zal elk antwoord op een draadje dat je volgt een e-mailnotificatie sturen", "notification_settings.email.crt.send": "Meldingen bij reacties op draadjes", @@ -948,6 +994,8 @@ "screen.search.results.filter.title": "Filteren op bestandstype", "screen.search.results.filter.videos": "Video's", "screen.search.title": "Zoeken", + "screens.channel_bookmark_add": "Een bladwijzer toevoegen", + "screens.channel_bookmark_edit": "Bladwijzer bewerken", "screens.channel_edit": "Kanaal bewerken", "screens.channel_edit_header": "Kanaalhoofding bewerken", "screens.channel_info": "Kanaalinfo", @@ -961,6 +1009,7 @@ "select_team.title": "Selecteer een team", "server.invalid.certificate.description": "Het certificaat voor deze server is ongeldig.\nMogelijks maak je verbinding met een server die zich voordoet als \"{hostname}\", waardoor je vertrouwelijke gegevens in gevaar kunnen komen.", "server.invalid.certificate.title": "Ongeldig SSL-certificaat", + "server.invalid.pinning.title": "Ongeldig vastgemaakt SSL-certificaat", "server.logout.alert_description": "Alle bijbehorende gegevens worden verwijderd", "server.logout.alert_title": "Weet je zeker dat je wilt uitloggen bij {displayName}?", "server.remove.alert_description": "Dit zal de server verwijderen uit jouw lijst van servers. Alle bijbehorende gegevens worden verwijderd", @@ -993,7 +1042,7 @@ "settings.about.server.version": "Serverversie: {version} (Build {buildNumber}", "settings.about.server.version.noBuild": "Serverversie: {version}", "settings.about.server.version.title": "Serverversie:", - "settings.about.server.version.value": "{version} (Build {number})", + "settings.about.server.version.value": "{version} (Build {buildNumber})", "settings.advanced.cancel": "Annuleren", "settings.advanced.delete": "Verwijderen", "settings.advanced.delete_data": "Lokale bestanden verwijderen", @@ -1042,6 +1091,7 @@ "skintone_selector.tooltip.title": "Kies jouw standaard huidskleur", "smobile.search.recent_title": "Recente zoekopdrachten in {teamName}", "snack.bar.channel.members.added": "{numMembers, number} {numMembers, plural, one {lid} other {leden}} toegevoegd", + "snack.bar.code.copied": "Code gekopieerd naar klembord", "snack.bar.favorited.channel": "Dit kanaal was gemarkeerd als favoriet", "snack.bar.following.thread": "Gevolgd draadje", "snack.bar.info.copied": "Info gekopieerd naar klembord", @@ -1065,6 +1115,7 @@ "suggestion.mention.groups": "Groepsvermeldingen", "suggestion.mention.here": "Verwittig iedereen in dit kanaal", "suggestion.mention.morechannels": "Andere Kanalen", + "suggestion.mention.nonmembers": "Niet in kanaal", "suggestion.mention.special": "Speciale Vermeldingen", "suggestion.mention.users": "Gebruikers", "suggestion.search.direct": "Privé bericht", diff --git a/assets/base/i18n/pl.json b/assets/base/i18n/pl.json index 6fe3d02c92c..93d3035820d 100644 --- a/assets/base/i18n/pl.json +++ b/assets/base/i18n/pl.json @@ -96,6 +96,28 @@ "camera_type.video.option": "Nagraj wideo", "center_panel.archived.closeChannel": "Zamknij Kanał", "channel_add_members.add_members.button": "Dodaj Użytkowników", + "channel_bookmark.add.detail_title": "Tytuł", + "channel_bookmark.add.emoji": "Dodaj emoji", + "channel_bookmark.add.failed_title": "Błąd dodawania zakładki", + "channel_bookmark.add.file_cancel": "Anuluj", + "channel_bookmark.add.file_title": "Załącznik", + "channel_bookmark.add.file_upload_error": "Błąd przesyłania pliku. Spróbuj ponownie.", + "channel_bookmark.add.file_uploading": "Przesyłanie... ({progress}%)", + "channel_bookmark.add_edit.failed_desc": "Szczegóły: {error}", + "channel_bookmark.copy_option": "Kopiuj Odnośnik", + "channel_bookmark.delete.confirm": "Na pewno chcesz usunąć zakładkę {displayName}?", + "channel_bookmark.delete.confirm_title": "Usuń zakładkę", + "channel_bookmark.delete.failed_detail": "Szczegóły: {error}", + "channel_bookmark.delete.failed_title": "Błąd usuwania zakładki", + "channel_bookmark.delete.yes": "Tak", + "channel_bookmark.delete_option": "Usuń", + "channel_bookmark.edit.failed_title": "Błąd edycji zakładki", + "channel_bookmark.edit.save_button": "Zapisz", + "channel_bookmark.edit_option": "Edytuj", + "channel_bookmark.share_option": "Udostępnij", + "channel_bookmark_add.link": "Link", + "channel_bookmark_add.link.input.description": "Dodaj link do dowolnego postu, pliku lub linku zewnętrznego", + "channel_bookmark_add.link.invalid": "Wprowadź prawidłowy link", "channel_files.empty.paragraph": "Pliki umieszczone w tym kanale będą wyświetlane tutaj.", "channel_files.empty.title": "Nie ma jeszcze plików", "channel_files.noFiles.paragraph": "Ten kanał nie zawiera żadnych plików z zastosowanymi filtrami", @@ -103,6 +125,10 @@ "channel_header.directchannel.you": "{displayName} (ty)", "channel_header.info": "Wyświetl informacje", "channel_header.member_count": "{count, plural, one {# członek} other {# członkowie}}", + "channel_info.add_bookmark": "Dodaj zakładkę", + "channel_info.add_bookmark.file": "Dołącz plik", + "channel_info.add_bookmark.link": "Dodaj link", + "channel_info.add_bookmark.max_reached": "Ten kanał osiągnął maksymalną liczbę zakładek.", "channel_info.add_members": "Dodaj użytkowników", "channel_info.alertNo": "Nie", "channel_info.alertYes": "Tak", @@ -445,9 +471,9 @@ "mobile.calls_call_ended": "Połączenie zakończone", "mobile.calls_call_screen": "Połączenie", "mobile.calls_call_thread": "Wątek połączeń", + "mobile.calls_cancel": "Anuluj", "mobile.calls_captions": "Napisy", "mobile.calls_captions_turned_on": "Napisy na żywo włączone", - "mobile.calls_current_call": "Aktualne połączenie", "mobile.calls_disable": "Wyłącz połączenia", "mobile.calls_dismiss": "Odrzuć", "mobile.calls_enable": "Włącz połączenia", @@ -460,21 +486,32 @@ "mobile.calls_ended_at": "Zakończone", "mobile.calls_error_message": "Błąd: {error}", "mobile.calls_error_title": "Błąd", + "mobile.calls_group_calls_not_available": "Połączenia są dostępne tylko w kanałach DM.", "mobile.calls_headset": "Zestaw słuchawkowy", "mobile.calls_hide_cc": "Ukryj napisy na żywo", "mobile.calls_host": "host", "mobile.calls_host_controls": "Elementy sterujące hosta", + "mobile.calls_host_end_confirm": "Zakończ połączenie dla wszystkich", + "mobile.calls_host_leave_confirm": "Opuść połączenie", + "mobile.calls_host_leave_title": "Czy na pewno chcesz opuścić to połączenie?", "mobile.calls_host_rec": "Nagrywasz to spotkanie. Rozważ poinformowanie wszystkich o tym, że to spotkanie jest nagrywane.", "mobile.calls_host_rec_error": "Proszę spróbować nagrać ponownie. Możesz również skontaktować się z administratorem systemu, aby uzyskać pomoc w rozwiązywaniu problemów.", "mobile.calls_host_rec_error_title": "Coś poszło nie tak z nagraniem", + "mobile.calls_host_rec_stop_body": "Nagranie rozmowy zostanie przetworzone i opublikowane w wątku rozmowy. Czy na pewno chcesz zatrzymać nagrywanie?", + "mobile.calls_host_rec_stop_confirm": "Zatrzymaj nagrywanie", + "mobile.calls_host_rec_stop_title": "Zatrzymaj nagrywanie", "mobile.calls_host_rec_stopped": "Nagranie będzie można znaleźć w wątku czatu tej rozmowy po zakończeniu jej przetwarzania.", "mobile.calls_host_rec_stopped_title": "Nagrywanie zostało przerwane. Przetwarzanie...", "mobile.calls_host_rec_title": "Nagrywasz", + "mobile.calls_host_rec_trans_stop_body": "Pliki nagrania i transkrypcji rozmowy zostaną przetworzone i opublikowane w wątku rozmowy. Czy na pewno chcesz zatrzymać nagrywanie i transkrypcję?", + "mobile.calls_host_rec_trans_stop_title": "Zatrzymaj nagrywanie i transkrypcję", "mobile.calls_host_transcription": "Rozważ poinformowanie wszystkich, że to spotkanie jest nagrywane i transkrybowane.", "mobile.calls_host_transcription_title": "Rozpoczęło się nagrywanie i transkrypcja", "mobile.calls_incoming_dm": "{name} zaprasza do rozmowy", "mobile.calls_incoming_gm": "{name} zaprasza do rozmowy z {num, plural, one {# innym} other {# innymi}} ", + "mobile.calls_join": "Dołącz", "mobile.calls_join_call": "Dołącz do rozmowy", + "mobile.calls_joining": "Dołączanie...", "mobile.calls_lasted": "Trwało {duration}", "mobile.calls_leave": "Opuść", "mobile.calls_leave_call": "Opuść połączenie", @@ -489,7 +526,6 @@ "mobile.calls_mute_others": "Wycisz innych", "mobile.calls_mute_participant": "Wycisz uczestnika", "mobile.calls_name_is_talking_postfix": "mówi...", - "mobile.calls_name_started_call": "{name} rozpoczął połączenie", "mobile.calls_noone_talking": "Nikt nie mówi", "mobile.calls_not_available_msg": "Skontaktuj się z Administratorem Systemu, aby włączyć tą funkcję.", "mobile.calls_not_available_option": "(Niedostępne)", @@ -510,7 +546,6 @@ "mobile.calls_raise_hand": "Zgłoś się", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# więcej}}zgłosiło się", "mobile.calls_react": "Reaguj", - "mobile.calls_rec": "rec", "mobile.calls_record": "Zapis", "mobile.calls_recording_start_in_progress": "Nagranie jest już w trakcie realizacji.", "mobile.calls_recording_start_no_permissions": "Nie masz uprawnień do rozpoczęcia nagrywania. Poproś prowadzącego rozmowę o uruchomienie nagrania.", @@ -529,6 +564,8 @@ "mobile.calls_speaker": "Mówca", "mobile.calls_start_call": "Rozpocznij Połączenie", "mobile.calls_start_call_exists": "W kanale trwa już rozmowa.", + "mobile.calls_started_call": "Połączenie rozpoczęte", + "mobile.calls_starting": "Uruchamianie...", "mobile.calls_stop_recording": "Zatrzymaj nagrywanie", "mobile.calls_stop_screenshare": "Zatrzymaj udostępnianie ekranu", "mobile.calls_tablet": "Tablet", @@ -620,11 +657,11 @@ "mobile.link.error.title": "Błąd", "mobile.login_options.cant_heading": "Nie można się zalogować", "mobile.login_options.enter_credentials": "Wpisz poniżej swoje dane do logowania.", + "mobile.login_options.entraid": "Entra ID", "mobile.login_options.gitlab": "GitLab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "Zaloguj się na Swoje Konto", "mobile.login_options.none": "Nie możesz jeszcze zalogować się na swoje konto. Musi być skonfigurowana co najmniej jedna opcja logowania. Skontaktuj się z administratorem systemu, aby uzyskać pomoc.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Wybierz poniżej opcję logowania.", @@ -645,9 +682,7 @@ "mobile.manage_members.section_title_members": "CZŁONKOWIE", "mobile.managed.blocked_by": "Zablokowany przez {vendor}", "mobile.managed.exit": "Wyjście", - "mobile.managed.jailbreak": "Jailbroken urządzenia nie są zaufane przez {vendor}.\n\nPowód {reason}\n\n\n\nDebug info: {debug}\n\nProszę zamknąć aplikację.", - "mobile.managed.jailbreak_no_debug_info": "Niedostępne", - "mobile.managed.jailbreak_no_reason": "Niedostępne", + "mobile.managed.jailbreak": "Urządzenia po jailbreaku lub zrootowane nie są zaufane przez {vendor}.\n\nAplikacja zostanie teraz zamknięta.", "mobile.managed.not_secured.android": "To urządzenie musi zostać zabezpieczone blokadą ekranu, aby użyć Mattermost.", "mobile.managed.not_secured.ios": "To urządzenie musi zostać zabezpieczone hasłem, aby używać Mattermost.\n\nIdz do Ustawienia > Identyfikacja twarzy i hasło.", "mobile.managed.not_secured.ios.touchId": "To urządzenie musi zostać zabezpieczone hasłem, aby używać Mattermost.\n\nPrzejdź do Ustawienia > Touch ID i Hasło.", @@ -667,10 +702,11 @@ "mobile.no_results_with_term.files": "Brak plików pasujących do \"{term}\"", "mobile.no_results_with_term.messages": "Nie znaleziono dopasowań dla \"{term}\"", "mobile.oauth.failed_to_login": "Twoja próba logowania nie powiodła się. Proszę spróbować ponownie.", - "mobile.oauth.failed_to_open_link": "Nie udało się otworzyć linku. Proszę spróbować ponownie.", - "mobile.oauth.failed_to_open_link_no_browser": "Nie udało się otworzyć linku. Proszę sprawdzić, czy na urządzeniu jest zainstalowana przeglądarka.", - "mobile.oauth.something_wrong": "Coś poszło nie tak", + "mobile.oauth.failed_to_open_link": "Nie udało się otworzyć linku. Spróbuj ponownie.", + "mobile.oauth.failed_to_open_link_no_browser": "Nie udało się otworzyć łącza. Sprawdź, czy na urządzeniu zainstalowana jest przeglądarka.", "mobile.oauth.something_wrong.okButton": "OK", + "mobile.oauth.success.description": "Trwa logowanie, chwileczkę...", + "mobile.oauth.success.title": "Uwierzytelnianie powiodło się", "mobile.oauth.switch_to_browser": "Zostaniesz przekierowany do swojego dostawcy usług logowania", "mobile.oauth.switch_to_browser.error_title": "Błąd w podpisie", "mobile.oauth.switch_to_browser.title": "Przekierowanie...", @@ -791,6 +827,16 @@ "notification_settings.auto_responder.footer.message": "Ustaw niestandardową wiadomość, która jest automatycznie wysyłana w odpowiedzi na wiadomości bezpośrednie, takie jak spoza biura lub z urlopu. Włączenie tego ustawienia powoduje zmianę statusu użytkownika na Poza biurem i wyłączy powiadomienia.", "notification_settings.auto_responder.message": "Wiadomość", "notification_settings.auto_responder.to.enable": "Włącz automatyczne odpowiedzi", + "notification_settings.call_notification": "Powiadomienia o połączeniach", + "notification_settings.calls": "Powiadomienia o połączeniach", + "notification_settings.calls.callsInfo": "Uwaga: aby usłyszeć podgląd dzwonka, tryb cichy musi być wyłączony.", + "notification_settings.calls.calm": "Spokój", + "notification_settings.calls.cheerful": "Wesoły", + "notification_settings.calls.dynamic": "Dynamiczny", + "notification_settings.calls.enable_sound": "Dźwięk powiadomienia dla połączeń przychodzących", + "notification_settings.calls.urgent": "Pilne", + "notification_settings.calls_off": "Wył", + "notification_settings.calls_on": "Wł", "notification_settings.email": "Powiadomienia Email", "notification_settings.email.crt.emailInfo": "Po włączeniu każda odpowiedź na wątek, który obserwujesz, wyśle powiadomienie e-mail", "notification_settings.email.crt.send": "Powiadomienia o odpowiedziach w wątku", @@ -948,6 +994,8 @@ "screen.search.results.filter.title": "Filtrowanie według typu pliku", "screen.search.results.filter.videos": "Wideo", "screen.search.title": "Szukaj", + "screens.channel_bookmark_add": "Dodaj zakładkę", + "screens.channel_bookmark_edit": "Edytuj zakładkę", "screens.channel_edit": "Edytuj Kanał", "screens.channel_edit_header": "Edycja nagłówka kanału", "screens.channel_info": "Informacje o kanale", @@ -961,6 +1009,7 @@ "select_team.title": "Wybierz zespół", "server.invalid.certificate.description": "Certyfikat tego serwera jest nieprawidłowy.\nMożliwe, że łączysz się z serwerem podszywającym się pod \"{hostname}\", co może narazić Twoje poufne informacje na ryzyko.", "server.invalid.certificate.title": "Nieprawidłowy certyfikat SSL", + "server.invalid.pinning.title": "Nieprawidłowy przypięty certyfikat SSL", "server.logout.alert_description": "Wszystkie powiązane dane zostaną usunięte", "server.logout.alert_title": "Czy na pewno chcesz się wylogować z {displayName}?", "server.remove.alert_description": "Spowoduje to usunięcie z listy serwerów. Wszystkie powiązane dane zostaną usunięte", @@ -993,7 +1042,7 @@ "settings.about.server.version": "Wersja serwera: {version} (kompilacja {buildNumber}", "settings.about.server.version.noBuild": "Wersja Serwera: {version}", "settings.about.server.version.title": "Wersja serwera:", - "settings.about.server.version.value": "{version} (Build {number})", + "settings.about.server.version.value": "{version} (Build {buildNumber})", "settings.advanced.cancel": "Anuluj", "settings.advanced.delete": "Usuń", "settings.advanced.delete_data": "Usuń pliki lokalne", @@ -1042,6 +1091,7 @@ "skintone_selector.tooltip.title": "Wybierz swój domyślny odcień wyglądu", "smobile.search.recent_title": "Ostatnie wyszukiwania w {teamName}", "snack.bar.channel.members.added": "{numMembers, number} {numMembers, plural, one {użytkownik} other {użytkowników}} dodanych", + "snack.bar.code.copied": "Kod skopiowany do schowka", "snack.bar.favorited.channel": "Ten kanał został polubiony", "snack.bar.following.thread": "Wątek śledzony", "snack.bar.info.copied": "Informacje skopiowane do schowka", @@ -1065,6 +1115,7 @@ "suggestion.mention.groups": "Group Mentions", "suggestion.mention.here": "Powiadamia wszystkich obecnie dostępnych na kanale", "suggestion.mention.morechannels": "Inne kanały", + "suggestion.mention.nonmembers": "Nie na Kanale", "suggestion.mention.special": "Specjalne wzmianki", "suggestion.mention.users": "Użytkownicy", "suggestion.search.direct": "Wiadomości bezpośrednie", diff --git a/assets/base/i18n/pt-BR.json b/assets/base/i18n/pt-BR.json index 3bb793b5696..9a51c6b52d9 100644 --- a/assets/base/i18n/pt-BR.json +++ b/assets/base/i18n/pt-BR.json @@ -415,7 +415,6 @@ "mobile.calls_call_ended": "", "mobile.calls_call_screen": "", "mobile.calls_call_thread": "", - "mobile.calls_current_call": "", "mobile.calls_disable": "", "mobile.calls_dismiss": "", "mobile.calls_enable": "", @@ -446,7 +445,6 @@ "mobile.calls_mic_error": "", "mobile.calls_more": "", "mobile.calls_mute": "", - "mobile.calls_name_started_call": "", "mobile.calls_noone_talking": "", "mobile.calls_not_available_msg": "", "mobile.calls_not_available_option": "", @@ -460,7 +458,6 @@ "mobile.calls_participant_rec_title": "", "mobile.calls_raise_hand": "", "mobile.calls_react": "", - "mobile.calls_rec": "", "mobile.calls_record": "", "mobile.calls_recording_start_in_progress": "", "mobile.calls_recording_start_no_permissions": "", @@ -544,7 +541,6 @@ "mobile.login_options.google": "", "mobile.login_options.heading": "", "mobile.login_options.none": "", - "mobile.login_options.office365": "", "mobile.login_options.openid": "", "mobile.login_options.saml": "", "mobile.login_options.select_option": "", @@ -566,8 +562,6 @@ "mobile.managed.blocked_by": "Bloqueado por {vendor}", "mobile.managed.exit": "Editar", "mobile.managed.jailbreak": "Os dispositivos com Jailbroken não são confiáveis para {vendor}, por favor saia do aplicativo.", - "mobile.managed.jailbreak_no_debug_info": "", - "mobile.managed.jailbreak_no_reason": "", "mobile.managed.not_secured.android": "Este dispositivo deve ser protegido com um bloqueio de tela para usar o Mattermost.", "mobile.managed.not_secured.ios": "Este dispositivo deve ser protegido por uma senha para usar o Mattermost.\n\nVá para Configurações > Face ID & Passcode.", "mobile.managed.not_secured.ios.touchId": "Este dispositivo deve ser protegido por uma senha para usar o Mattermost.\n\nVá em Ajustes > Touch ID & Código.", @@ -586,9 +580,6 @@ "mobile.no_results_with_term.files": "", "mobile.no_results_with_term.messages": "", "mobile.oauth.failed_to_login": "Sua tentativa de login falhou. Por favor, tente novamente.", - "mobile.oauth.failed_to_open_link": "O link falhou ao abrir. Por favor, tente novamente.", - "mobile.oauth.failed_to_open_link_no_browser": "", - "mobile.oauth.something_wrong": "Algo deu errado", "mobile.oauth.something_wrong.okButton": "", "mobile.oauth.switch_to_browser": "", "mobile.oauth.switch_to_browser.error_title": "", diff --git a/assets/base/i18n/ro.json b/assets/base/i18n/ro.json index 9f0eb3dc072..861d2b66022 100644 --- a/assets/base/i18n/ro.json +++ b/assets/base/i18n/ro.json @@ -397,7 +397,6 @@ "mobile.calls_call_ended": "", "mobile.calls_call_screen": "", "mobile.calls_call_thread": "", - "mobile.calls_current_call": "", "mobile.calls_disable": "", "mobile.calls_dismiss": "", "mobile.calls_enable": "", @@ -428,7 +427,6 @@ "mobile.calls_mic_error": "", "mobile.calls_more": "", "mobile.calls_mute": "", - "mobile.calls_name_started_call": "", "mobile.calls_noone_talking": "", "mobile.calls_not_available_msg": "", "mobile.calls_not_available_option": "", @@ -442,7 +440,6 @@ "mobile.calls_participant_rec_title": "", "mobile.calls_raise_hand": "", "mobile.calls_react": "", - "mobile.calls_rec": "", "mobile.calls_record": "", "mobile.calls_recording_start_in_progress": "", "mobile.calls_recording_start_no_permissions": "", @@ -526,7 +523,6 @@ "mobile.login_options.google": "", "mobile.login_options.heading": "", "mobile.login_options.none": "", - "mobile.login_options.office365": "", "mobile.login_options.openid": "", "mobile.login_options.saml": "", "mobile.login_options.select_option": "", @@ -548,8 +544,6 @@ "mobile.managed.blocked_by": "Blocat de {vendor}", "mobile.managed.exit": "Iesi", "mobile.managed.jailbreak": "Dispozitivele jailbroken nu au încredere în {vendor}, închideți aplicația.", - "mobile.managed.jailbreak_no_debug_info": "", - "mobile.managed.jailbreak_no_reason": "", "mobile.managed.not_secured.android": "Acest dispozitiv trebuie să fie asigurat cu un dispozitiv de blocare a ecranului pentru a utiliza Mattermost.", "mobile.managed.not_secured.ios": "Acest dispozitiv trebuie să fie securizat cu un cod de acces pentru a utiliza Mattermost.\n\nAccesați Setări > ID-ul feței și codul de acces.", "mobile.managed.not_secured.ios.touchId": "Acest dispozitiv trebuie să fie securizat cu un cod de acces pentru a utiliza Mattermost.\n \nAccesați Setări > ID-ul feței și codul de acces.", @@ -568,9 +562,6 @@ "mobile.no_results_with_term.files": "", "mobile.no_results_with_term.messages": "", "mobile.oauth.failed_to_login": "Încercarea dvs. de autentificare a eșuat. Vă rugăm să încercați din nou.", - "mobile.oauth.failed_to_open_link": "Linkul nu a putut fi deschis. Vă rugăm să încercați din nou.", - "mobile.oauth.failed_to_open_link_no_browser": "", - "mobile.oauth.something_wrong": "Ceva n-a mers bine", "mobile.oauth.something_wrong.okButton": "", "mobile.oauth.switch_to_browser": "", "mobile.oauth.switch_to_browser.error_title": "", diff --git a/assets/base/i18n/ru.json b/assets/base/i18n/ru.json index 775677617fa..44509ca06f7 100644 --- a/assets/base/i18n/ru.json +++ b/assets/base/i18n/ru.json @@ -96,6 +96,28 @@ "camera_type.video.option": "Записать видео", "center_panel.archived.closeChannel": "Закрыть канал", "channel_add_members.add_members.button": "Добавить участников", + "channel_bookmark.add.detail_title": "Заголовок", + "channel_bookmark.add.emoji": "Добавить эмодзи", + "channel_bookmark.add.failed_title": "Ошибка при добавлении закладки", + "channel_bookmark.add.file_cancel": "Отмена", + "channel_bookmark.add.file_title": "Вложение", + "channel_bookmark.add.file_upload_error": "Ошибка при загрузке файла. Пожалуйста, попробуйте еще раз.", + "channel_bookmark.add.file_uploading": "Загрузка... ({progress}%)", + "channel_bookmark.add_edit.failed_desc": "Подробности: {error}", + "channel_bookmark.copy_option": "Копировать ссылку", + "channel_bookmark.delete.confirm": "Вы уверены, что хотите удалить закладку {displayName}?", + "channel_bookmark.delete.confirm_title": "Удалить закладку", + "channel_bookmark.delete.failed_detail": "Подробности: {error}", + "channel_bookmark.delete.failed_title": "Ошибка при удалении закладки", + "channel_bookmark.delete.yes": "Да", + "channel_bookmark.delete_option": "Удалить", + "channel_bookmark.edit.failed_title": "Ошибка при изменении закладки", + "channel_bookmark.edit.save_button": "Сохранить", + "channel_bookmark.edit_option": "Изменить", + "channel_bookmark.share_option": "Поделиться", + "channel_bookmark_add.link": "Ссылка", + "channel_bookmark_add.link.input.description": "Добавьте ссылку на любое сообщение, файл или любую внешнюю ссылку", + "channel_bookmark_add.link.invalid": "Пожалуйста, введите валидную ссылку", "channel_files.empty.paragraph": "Здесь показаны опубликованные в этом канале файлы.", "channel_files.empty.title": "Файлов пока нет", "channel_files.noFiles.paragraph": "Этот канал не содержит файлов с примененными фильтрами", @@ -103,6 +125,10 @@ "channel_header.directchannel.you": "{displayName} (вы)", "channel_header.info": "Посмотреть информацию", "channel_header.member_count": "{count, plural, one {# участник} few {# участника} other {# участников}}", + "channel_info.add_bookmark": "Добавить закладку", + "channel_info.add_bookmark.file": "Прикрепить файл", + "channel_info.add_bookmark.link": "Добавить ссылку", + "channel_info.add_bookmark.max_reached": "На этом канале достигнуто максимальное количество закладок.", "channel_info.add_members": "Добавить участников", "channel_info.alertNo": "Нет", "channel_info.alertYes": "Да", @@ -229,11 +255,11 @@ "combined_system_message.left_team.two": "{firstUser} и {secondUser} **покинули команду**.", "combined_system_message.removed_from_channel.many_expanded": "{users} и {lastUser} **удалены с канала**.", "combined_system_message.removed_from_channel.one": "{firstUser} был **удалён с канала**.", - "combined_system_message.removed_from_channel.one_you": "Вы были **удалены с канала**.", + "combined_system_message.removed_from_channel.one_you": "Вы были **удалены из канала**.", "combined_system_message.removed_from_channel.two": "{firstUser} и {secondUser} были **удалены с канала**.", "combined_system_message.removed_from_team.many_expanded": "{users} и {lastUser} **удалены из команды**.", "combined_system_message.removed_from_team.one": "{firstUser} был **удалён из команды**.", - "combined_system_message.removed_from_team.one_you": "Вы были **удалены с канала**.", + "combined_system_message.removed_from_team.one_you": "Вы были **удалены из канала**.", "combined_system_message.removed_from_team.two": "{firstUser} и {secondUser} **удалены из команды**.", "combined_system_message.you": "Вы", "connection_banner.connected": "Соединение восстановлено", @@ -445,9 +471,9 @@ "mobile.calls_call_ended": "Вызов завершен", "mobile.calls_call_screen": "Звонок", "mobile.calls_call_thread": "Обсуждение звонка", + "mobile.calls_cancel": "Отменить", "mobile.calls_captions": "Титры", "mobile.calls_captions_turned_on": "Включены живые титры", - "mobile.calls_current_call": "Текущий звонок", "mobile.calls_disable": "Отключить звонки", "mobile.calls_dismiss": "Отклонить", "mobile.calls_enable": "Разрешить звонки", @@ -460,21 +486,32 @@ "mobile.calls_ended_at": "Окончен в", "mobile.calls_error_message": "Ошибка: {error}", "mobile.calls_error_title": "Ошибка", + "mobile.calls_group_calls_not_available": "Звонки доступны только в приватных каналах (DM).", "mobile.calls_headset": "Гарнитура", "mobile.calls_hide_cc": "Скрыть живые титры", "mobile.calls_host": "хост", "mobile.calls_host_controls": "Управление хостом", + "mobile.calls_host_end_confirm": "Завершить звонок для всех", + "mobile.calls_host_leave_confirm": "Отключиться", + "mobile.calls_host_leave_title": "Вы уверены, что хотите отключиться от звонка?", "mobile.calls_host_rec": "Вы записываете это собрание. Подумайте о том, чтобы сообщить всем о том, что это собрание записывается.", "mobile.calls_host_rec_error": "Пожалуйста, попробуйте записать еще раз. Вы также можете обратиться к системному администратору за помощью в устранении неполадок.", "mobile.calls_host_rec_error_title": "Что-то пошло не так с записью", + "mobile.calls_host_rec_stop_body": "Запись звонка будет обработана и выложена в сообщении в теме звонка. Вы уверены, что хотите остановить запись?", + "mobile.calls_host_rec_stop_confirm": "Остановить запись", + "mobile.calls_host_rec_stop_title": "Остановить запись", "mobile.calls_host_rec_stopped": "Вы можете найти запись в чате этого звонка после завершения его обработки.", "mobile.calls_host_rec_stopped_title": "Запись остановлена. Обработка...", "mobile.calls_host_rec_title": "Вы записываете", + "mobile.calls_host_rec_trans_stop_body": "Файлы записи и расшифровки звонка будут обработаны и выложены в сообщении о звонке. Вы уверены, что хотите остановить запись и расшифровку?", + "mobile.calls_host_rec_trans_stop_title": "Останови запись и расшифровку", "mobile.calls_host_transcription": "Подумайте о том, чтобы сообщить всем, что это собрание будет записываться и расшифровываться (транскрибироваться).", "mobile.calls_host_transcription_title": "Запись и расшифровка уже начались", "mobile.calls_incoming_dm": "{name} приглашает вас на звонок", "mobile.calls_incoming_gm": "{name} приглашает Вас на разговор с {num, plural, one {# одним участником} few {# несколькими участниками} other {# несколькими участниками}}", + "mobile.calls_join": "Присоединиться", "mobile.calls_join_call": "Присоединиться к звонку", + "mobile.calls_joining": "Присоединяемся...", "mobile.calls_lasted": "Длительность: {duration}", "mobile.calls_leave": "Покинуть", "mobile.calls_leave_call": "Покинуть звонок", @@ -486,8 +523,9 @@ "mobile.calls_mic_error": "Для участия откройте \"Настройки\", чтобы предоставить Mattermost доступ к вашему микрофону.", "mobile.calls_more": "Ещё", "mobile.calls_mute": "Отключить звук", + "mobile.calls_mute_others": "Отключить звук у других", + "mobile.calls_mute_participant": "Отключить звук у участника", "mobile.calls_name_is_talking_postfix": "говорит...", - "mobile.calls_name_started_call": "{name} начал звонок", "mobile.calls_noone_talking": "Никто не говорит", "mobile.calls_not_available_msg": "Обратитесь к системному администратору, чтобы включить эту функцию.", "mobile.calls_not_available_option": "(Недоступно)", @@ -508,12 +546,17 @@ "mobile.calls_raise_hand": "Поднять руку", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# несколько участников}}подняло руку", "mobile.calls_react": "Реакции", - "mobile.calls_rec": "запись", "mobile.calls_record": "Запись", "mobile.calls_recording_start_in_progress": "Запись уже ведется.", "mobile.calls_recording_start_no_permissions": "У вас нет прав для начала записи. Пожалуйста, попросите ведущего звонка начать запись.", "mobile.calls_recording_stop_no_permissions": "У вас нет прав на остановку записи. Пожалуйста, попросите ведущего звонка остановить запись.", "mobile.calls_recording_stop_none_in_progress": "Запись не ведется.", + "mobile.calls_remove": "Удалить", + "mobile.calls_remove_alert_body": "Вы уверены, что хотите удалить {displayName} из разговора? ", + "mobile.calls_remove_alert_title": "Удалить участника", + "mobile.calls_remove_participant": "Удалить из звонка", + "mobile.calls_removed_alert_body": "Ведущий удалил вас из звонка.", + "mobile.calls_removed_alert_title": "Вас удалили из звонка", "mobile.calls_request_message": "В настоящее время звонки работают в тестовом режиме, и запустить их могут только системные администраторы. Обращайтесь за помощью непосредственно к системному администратору", "mobile.calls_request_title": "Звонки в настоящее время не включены", "mobile.calls_see_logs": "Смотрите журналы сервера", @@ -521,7 +564,10 @@ "mobile.calls_speaker": "Динамик", "mobile.calls_start_call": "Позвонить", "mobile.calls_start_call_exists": "В канале уже идет звонок.", + "mobile.calls_started_call": "Звонок начался", + "mobile.calls_starting": "Начинаем...", "mobile.calls_stop_recording": "Остановить запись", + "mobile.calls_stop_screenshare": "Остановить совместное использование экрана", "mobile.calls_tablet": "Планшет", "mobile.calls_thread": "Обсуждение", "mobile.calls_unmute": "Включить звук", @@ -529,6 +575,7 @@ "mobile.calls_user_left_channel_error_title": "Вы покинули канал", "mobile.calls_user_removed_from_channel_error_message": "Вас удалили с канала и отключили от звонка.", "mobile.calls_user_removed_from_channel_error_title": "Вас удалили с канала", + "mobile.calls_view_profile": "Просмотр профиля", "mobile.calls_viewing_screen": "Вы просматриваете экран {name}", "mobile.calls_you": "(это вы)", "mobile.calls_you_2": "Вы", @@ -610,11 +657,11 @@ "mobile.link.error.title": "Ошибка", "mobile.login_options.cant_heading": "Не могу войти в систему", "mobile.login_options.enter_credentials": "Введите свои данные для входа в систему ниже.", + "mobile.login_options.entraid": "Идентификатор Entra", "mobile.login_options.gitlab": "GitLab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "Войдите в свою учетную запись", "mobile.login_options.none": "Вы пока не можете войти в свою учетную запись. Должен быть настроен хотя бы один вариант входа в систему. Обратитесь за помощью к своему системному администратору.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Выберите вариант входа в систему ниже.", @@ -635,9 +682,7 @@ "mobile.manage_members.section_title_members": "УЧАСТНИКИ", "mobile.managed.blocked_by": "Заблокирован {vendor}", "mobile.managed.exit": "Выход", - "mobile.managed.jailbreak": "Устройства с джейлбрейком не являются доверенными {vendor}, выйдите из приложения..\n\nПричина {reason}\n\n\n\nОтладочная информация: {debug}\n\nПожалуйста, выйдите из приложения.", - "mobile.managed.jailbreak_no_debug_info": "Недоступно", - "mobile.managed.jailbreak_no_reason": "Недоступно", + "mobile.managed.jailbreak": "Джейлбрейкнутые или рутованные устройства не пользуются доверием {vendor}.\n\nТеперь приложение закроется.", "mobile.managed.not_secured.android": "Это устройство должно быть защищено с помощью блокировки экрана, чтобы использовать Mattermost.", "mobile.managed.not_secured.ios": "Это устройство должно быть защищено паролем для использования Mattermost. \n\nПерейдите в Настройки > Face ID и пароль.", "mobile.managed.not_secured.ios.touchId": "Это устройство должно быть защищено паролем для использования Mattermost.\n\nПерейдите в Настройки > Touch ID и пароль.", @@ -657,10 +702,11 @@ "mobile.no_results_with_term.files": "Нет файлов, соответствующих \"{term}\"", "mobile.no_results_with_term.messages": "Не найдено совпадений для \"{term}\"", "mobile.oauth.failed_to_login": "Ваша попытка входа не удалась. Пожалуйста, попробуйте ещё раз.", - "mobile.oauth.failed_to_open_link": "Ссылка не открылась. Пожалуйста, попробуйте еще раз.", + "mobile.oauth.failed_to_open_link": "Ссылка не открылась. Пожалуйста, попробуйте ещё раз.", "mobile.oauth.failed_to_open_link_no_browser": "Ссылку не удалось открыть. Убедитесь, что на устройстве установлен браузер.", - "mobile.oauth.something_wrong": "Что-то пошло не так", "mobile.oauth.something_wrong.okButton": "ОК", + "mobile.oauth.success.description": "Входим в систему, один момент...", + "mobile.oauth.success.title": "Аутентификация успешна", "mobile.oauth.switch_to_browser": "Вы перенаправляетесь к поставщику услуг входа в систему", "mobile.oauth.switch_to_browser.error_title": "Ошибка при входе", "mobile.oauth.switch_to_browser.title": "Перенаправление...", @@ -781,6 +827,16 @@ "notification_settings.auto_responder.footer.message": "Задайте сообщение, которое будет автоматически отправляться в ответ на личные сообщения, например, ответ \"Не в офисе\" или \"В отпуске\". При включении этой настройки ваш статус изменится на \"Не в офисе\" и отключит уведомления.", "notification_settings.auto_responder.message": "Сообщение", "notification_settings.auto_responder.to.enable": "Включить автоматические ответы", + "notification_settings.call_notification": "Уведомления о звонках", + "notification_settings.calls": "Уведомления о звонках", + "notification_settings.calls.callsInfo": "Примечание: чтобы услышать мелодии звонка, беззвучный режим должен быть выключен.", + "notification_settings.calls.calm": "Тихий", + "notification_settings.calls.cheerful": "Бодрый", + "notification_settings.calls.dynamic": "Динамичный", + "notification_settings.calls.enable_sound": "Звуковое уведомление о входящих вызовах", + "notification_settings.calls.urgent": "Срочный", + "notification_settings.calls_off": "Выкл", + "notification_settings.calls_on": "Вкл", "notification_settings.email": "Уведомления на email", "notification_settings.email.crt.emailInfo": "Когда эта функция включена, любой ответ в обсуждении, за которым Вы следите, будет отправлять уведомление по электронной почте", "notification_settings.email.crt.send": "Оповещение об ответах в обсуждении", @@ -938,6 +994,8 @@ "screen.search.results.filter.title": "Фильтр по типу файлов", "screen.search.results.filter.videos": "Видео", "screen.search.title": "Поиск", + "screens.channel_bookmark_add": "Добавить закладку", + "screens.channel_bookmark_edit": "Изменить закладку", "screens.channel_edit": "Изменить канал", "screens.channel_edit_header": "Изменить заголовок канала", "screens.channel_info": "Информация о канале", @@ -951,6 +1009,7 @@ "select_team.title": "Выберите команду", "server.invalid.certificate.description": "Сертификат этого сервера недействителен.\nВозможно, вы подключаетесь к серверу, который выдает себя за \"{hostname}\", что может подвергнуть риску вашу конфиденциальную информацию.", "server.invalid.certificate.title": "Недействительный сертификат SSL", + "server.invalid.pinning.title": "Недействительный прикрепленный SSL-сертификат", "server.logout.alert_description": "Все связанные данные будут удалены", "server.logout.alert_title": "Вы уверены, что хотите выйти из {displayName}?", "server.remove.alert_description": "Это удалит его из вашего списка серверов. Все связанные с ним данные будут удалены", @@ -983,7 +1042,7 @@ "settings.about.server.version": "Версия сервера: {version} (Build {buildNumber}", "settings.about.server.version.noBuild": "Версия сервера: {version}", "settings.about.server.version.title": "Версия сервера:", - "settings.about.server.version.value": "{version} (Сборка {number})", + "settings.about.server.version.value": "{version} (Сборка {buildNumber})", "settings.advanced.cancel": "Отмена", "settings.advanced.delete": "Удалить", "settings.advanced.delete_data": "Удаление локальных файлов", @@ -1055,7 +1114,9 @@ "suggestion.mention.groups": "Групповые упоминания", "suggestion.mention.here": "Уведомляет всех кто онлайн на канале", "suggestion.mention.morechannels": "Другие каналы", + "suggestion.mention.nonmembers": "Не в канале", "suggestion.mention.special": "Особые упоминания", + "suggestion.mention.users": "Пользователи", "suggestion.search.direct": "Личные сообщения", "suggestion.search.private": "Приватные каналы", "suggestion.search.public": "Публичные каналы", diff --git a/assets/base/i18n/sl.json b/assets/base/i18n/sl.json index 2028c2538be..3aa33133b35 100644 --- a/assets/base/i18n/sl.json +++ b/assets/base/i18n/sl.json @@ -43,8 +43,6 @@ "mobile.managed.exit": "Izhod", "mobile.markdown.code.plusMoreLines": "+{count, number} več {count, plural, one {line} drugih {lines}}", "mobile.oauth.failed_to_login": "Poskus prijave je neuspešen. Poskusi ponovno.", - "mobile.oauth.failed_to_open_link": "Odpiranje povezave ni uspelo. Poskusi ponovno.", - "mobile.oauth.something_wrong": "Nekaj je šlo narobe", "mobile.oauth.switch_to_browser": "Prosimo uporabite svoj brskalnik za dokončanje prijave.", "mobile.oauth.try_again": "Poskusi ponovno", "mobile.permission_denied_retry": "Nastavitve", diff --git a/assets/base/i18n/sq.json b/assets/base/i18n/sq.json index e5223d00fb9..8fb616eaaf7 100644 --- a/assets/base/i18n/sq.json +++ b/assets/base/i18n/sq.json @@ -170,8 +170,6 @@ "mobile.message_length.message_split_left": "Mesazhi tejkalon limitin e karakterit", "mobile.message_length.title": "Gjatësia e mesazhit", "mobile.oauth.failed_to_login": "Përpjekja juaj për hyrje dështoi. Ju lutemi provoni përsëri.", - "mobile.oauth.failed_to_open_link": "Lidhja nuk u hap. Ju lutemi provoni përsëri.", - "mobile.oauth.something_wrong": "Dicka shkoi keq", "mobile.oauth.try_again": "Provo përseri", "mobile.open_gm.error": "Ne nuk mund të hapnim një mesazh në grup me ata përdorues. Ju lutemi kontrolloni lidhjen tuaj dhe provoni përsëri.", "mobile.permission_denied_dismiss": "Mos Lejo", diff --git a/assets/base/i18n/sv.json b/assets/base/i18n/sv.json index 7ea5db03e5f..2d9b1ffba77 100644 --- a/assets/base/i18n/sv.json +++ b/assets/base/i18n/sv.json @@ -96,6 +96,28 @@ "camera_type.video.option": "Spela in video", "center_panel.archived.closeChannel": "Stäng kanalen", "channel_add_members.add_members.button": "Lägg till medlemmar", + "channel_bookmark.add.detail_title": "Titel", + "channel_bookmark.add.emoji": "Lägg till emoji", + "channel_bookmark.add.failed_title": "Fel när bokmärke lades till", + "channel_bookmark.add.file_cancel": "Avbryt", + "channel_bookmark.add.file_title": "Bilaga", + "channel_bookmark.add.file_upload_error": "Fel då fil laddades upp. Prova igen.", + "channel_bookmark.add.file_uploading": "Laddar upp... ({progress}%)", + "channel_bookmark.add_edit.failed_desc": "Detaljer: {error}", + "channel_bookmark.copy_option": "Kopiera länk", + "channel_bookmark.delete.confirm": "Är du säker på att du vill ta bort bokmärket {displayName}?", + "channel_bookmark.delete.confirm_title": "Ta bort bokmärke", + "channel_bookmark.delete.failed_detail": "Detaljer: {error}", + "channel_bookmark.delete.failed_title": "Fel när bokmärke togs bort", + "channel_bookmark.delete.yes": "Ja", + "channel_bookmark.delete_option": "Ta bort", + "channel_bookmark.edit.failed_title": "Fel då bokmärke redigerades", + "channel_bookmark.edit.save_button": "Spara", + "channel_bookmark.edit_option": "Redigera", + "channel_bookmark.share_option": "Dela", + "channel_bookmark_add.link": "Länk", + "channel_bookmark_add.link.input.description": "Lägg till en länk till ett meddelande, fil eller extern länk", + "channel_bookmark_add.link.invalid": "Ange en giltig länk", "channel_files.empty.paragraph": "Filer postade i kanalen visas här.", "channel_files.empty.title": "Ännu inga filer", "channel_files.noFiles.paragraph": "Den här kanalen innehåller inga filer med det filter som används", @@ -103,6 +125,10 @@ "channel_header.directchannel.you": "{displayName} (du)", "channel_header.info": "Visa info", "channel_header.member_count": "{count, plural, one {# medlem} other {# medlemmar}}", + "channel_info.add_bookmark": "Lägg till ett bokmärke", + "channel_info.add_bookmark.file": "Bifoga en fil", + "channel_info.add_bookmark.link": "Lägg till en länk", + "channel_info.add_bookmark.max_reached": "Kanalen har nått maximalt antal bokmärken.", "channel_info.add_members": "Lägg till medlemmar", "channel_info.alertNo": "Nej", "channel_info.alertYes": "Ja", @@ -445,9 +471,9 @@ "mobile.calls_call_ended": "Samtalet avslutades", "mobile.calls_call_screen": "Samtal", "mobile.calls_call_thread": "Samtalstråd", + "mobile.calls_cancel": "Avbryt", "mobile.calls_captions": "Textning", "mobile.calls_captions_turned_on": "Live-textning aktiverad", - "mobile.calls_current_call": "Aktuellt samtal", "mobile.calls_disable": "Inaktivera samtal", "mobile.calls_dismiss": "Avvisa", "mobile.calls_enable": "Aktivera samtal", @@ -460,21 +486,32 @@ "mobile.calls_ended_at": "Avslutades den", "mobile.calls_error_message": "Fel: {error}", "mobile.calls_error_title": "Fel", + "mobile.calls_group_calls_not_available": "Calls är bara tillgängligt i DM-kanaler.", "mobile.calls_headset": "Headset", "mobile.calls_hide_cc": "Dölj live-textning", "mobile.calls_host": "värd", "mobile.calls_host_controls": "Kontroller för värden", + "mobile.calls_host_end_confirm": "Avsluta samtalet för alla", + "mobile.calls_host_leave_confirm": "Lämna samtalet", + "mobile.calls_host_leave_title": "Är du säker på att du vill lämna det här samtalet?", "mobile.calls_host_rec": "Du spelar in det här mötet. Tänk på att informera alla om att mötet spelas in.", "mobile.calls_host_rec_error": "Försök att spela in igen. Du kan också kontakta din systemadministratör för att få hjälp med felsökning.", "mobile.calls_host_rec_error_title": "Något gick fel med inspelningen", + "mobile.calls_host_rec_stop_body": "Inspelningen av samtalet kommer att bearbetas och läggas upp i samtalstråden. Är du säker på att du vill stoppa inspelningen?", + "mobile.calls_host_rec_stop_confirm": "Stoppa inspelningen", + "mobile.calls_host_rec_stop_title": "Stoppa inspelningen", "mobile.calls_host_rec_stopped": "Du kan hitta inspelningen i den här samtalstråden när den är färdigprocessad.", "mobile.calls_host_rec_stopped_title": "Inspelningen har avbrutits. Processar...", "mobile.calls_host_rec_title": "Du spelar in", + "mobile.calls_host_rec_trans_stop_body": "Inspelningen av samtalet och transkriberingen kommer att bearbetas och publiceras i samtalstråden. Är du säker på att du vill stoppa inspelningen och transkriberingen?", + "mobile.calls_host_rec_trans_stop_title": "Stoppa inspelning och transkribering", "mobile.calls_host_transcription": "Överväg att informera alla om att mötet blir inspelat och automatiskt transkriberat.", "mobile.calls_host_transcription_title": "Inspelning och transkribering har startat", "mobile.calls_incoming_dm": "{name} bjuder in till ett samtal", "mobile.calls_incoming_gm": "{name} bjuder in dig till ett samtal med {num, plural, one {# annan} other {# andra}}", + "mobile.calls_join": "Anslut", "mobile.calls_join_call": "Anslut till samtalet", + "mobile.calls_joining": "Ansluter...", "mobile.calls_lasted": "Varade i {duration}", "mobile.calls_leave": "Lämna", "mobile.calls_leave_call": "Lämna samtalet", @@ -486,9 +523,9 @@ "mobile.calls_mic_error": "För att delta i samtalet, öppna Inställningar och ge Mattermost tillåtelse att använda mikrofonen.", "mobile.calls_more": "Mer", "mobile.calls_mute": "Mjuta", + "mobile.calls_mute_others": "Mjuta andra", "mobile.calls_mute_participant": "Mjuta deltagaren", "mobile.calls_name_is_talking_postfix": "pratar...", - "mobile.calls_name_started_call": "{name} startade ett samtal", "mobile.calls_noone_talking": "Ingen pratar", "mobile.calls_not_available_msg": "Kontakta din systemadministratör för att aktivera funktionen.", "mobile.calls_not_available_option": "(Ej tillgänglig)", @@ -509,12 +546,17 @@ "mobile.calls_raise_hand": "Räck upp handen", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# andra }}räcker upp handen", "mobile.calls_react": "Reaktioner", - "mobile.calls_rec": "rec", "mobile.calls_record": "Spela in", "mobile.calls_recording_start_in_progress": "En inspelning pågår redan.", "mobile.calls_recording_start_no_permissions": "Du har inte behörighet att starta en inspelning. Be samtalsvärden att starta en inspelning.", "mobile.calls_recording_stop_no_permissions": "Du har inte behörighet att stoppa inspelningen. Be samtalsvärden att stoppa inspelningen.", "mobile.calls_recording_stop_none_in_progress": "Ingen inspelning pågår.", + "mobile.calls_remove": "Ta bort", + "mobile.calls_remove_alert_body": "Är du säker på att du vill ta bort {displayName} från samtalet? ", + "mobile.calls_remove_alert_title": "Ta bort deltagare", + "mobile.calls_remove_participant": "Ta bort från samtal", + "mobile.calls_removed_alert_body": "Samtalsägaren tog bort dig från samtalet.", + "mobile.calls_removed_alert_title": "Du togs bort från samtalet", "mobile.calls_request_message": "Samtal körs för närvarande i testläge och endast systemadministratörer kan starta dem. Kontakta din systemadministratör för att få hjälp", "mobile.calls_request_title": "Calls är för närvarande inte aktiverat", "mobile.calls_see_logs": "Se serverloggar", @@ -522,6 +564,8 @@ "mobile.calls_speaker": "Högtalare", "mobile.calls_start_call": "Starta ett samtal", "mobile.calls_start_call_exists": "Ett samtal pågår redan i kanalen.", + "mobile.calls_started_call": "Samtalet startade", + "mobile.calls_starting": "Startar...", "mobile.calls_stop_recording": "Stoppa inspelningen", "mobile.calls_stop_screenshare": "Avsluta skärmdelning", "mobile.calls_tablet": "Platta", @@ -531,6 +575,7 @@ "mobile.calls_user_left_channel_error_title": "Du lämnade kanalen", "mobile.calls_user_removed_from_channel_error_message": "Du har tagits bort från kanalen och har kopplats bort från samtalet.", "mobile.calls_user_removed_from_channel_error_title": "Du har tagits bort från kanalen", + "mobile.calls_view_profile": "Visa profil", "mobile.calls_viewing_screen": "Du ser {name}'s skärm", "mobile.calls_you": "(du)", "mobile.calls_you_2": "Du", @@ -612,11 +657,11 @@ "mobile.link.error.title": "Fel", "mobile.login_options.cant_heading": "Kan inte logga in", "mobile.login_options.enter_credentials": "Ange dina inloggningsuppgifter nedan.", + "mobile.login_options.entraid": "Entra ID", "mobile.login_options.gitlab": "GitLab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "Logga in på ditt konto", "mobile.login_options.none": "Du kan inte logga in på ditt konto ännu. Minst ett inloggningsalternativ måste vara konfigurerat. Kontakta din systemadministratör för att få hjälp.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Välj ett inloggningsalternativ nedan.", @@ -636,10 +681,8 @@ "mobile.manage_members.section_title_admins": "KANALADMINISTRATÖRER", "mobile.manage_members.section_title_members": "MEDLEMMAR", "mobile.managed.blocked_by": "Blockerad av {vendor}", - "mobile.managed.exit": "Redigera", - "mobile.managed.jailbreak": "Din jailbrejkade enhet är inte betrodd av {vendor}.\n\nReason {reason}\n\n\n\nDebug info: {debug}\n\nAvsluta appen.", - "mobile.managed.jailbreak_no_debug_info": "Inte tillgänglig", - "mobile.managed.jailbreak_no_reason": "Inte tillgänglig", + "mobile.managed.exit": "Avsluta", + "mobile.managed.jailbreak": "Din jailbrejkade eller rootade enhet är inte betrodd av {vendor}.\n\nAppen kommer stängas.", "mobile.managed.not_secured.android": "Enheten behöver säkras med skärmlås för att använda Mattermost.", "mobile.managed.not_secured.ios": "Enheten behöver säkras med en passcode för att använda Mattermost.\n\nGå till Inställningar > Face ID & Passcode.", "mobile.managed.not_secured.ios.touchId": "Enheten behöver säkras med en passcode för att använda Mattermost.\n\nGå till Inställningar > Touch ID & Passcode.", @@ -661,8 +704,9 @@ "mobile.oauth.failed_to_login": "Inloggningen misslyckades. Försök igen.", "mobile.oauth.failed_to_open_link": "Länken gick inte att öppna. Försök igen.", "mobile.oauth.failed_to_open_link_no_browser": "Länken kunde inte öppnas. Kontrollera att en webbläsare är installerad.", - "mobile.oauth.something_wrong": "Något gick fel", "mobile.oauth.something_wrong.okButton": "OK", + "mobile.oauth.success.description": "Inloggning pågår, ett ögonblick...", + "mobile.oauth.success.title": "Autentiseringen lyckades", "mobile.oauth.switch_to_browser": "Du omdirigeras till din inloggningsleverantör", "mobile.oauth.switch_to_browser.error_title": "Fel vid inloggning", "mobile.oauth.switch_to_browser.title": "Omdirigeras...", @@ -783,6 +827,16 @@ "notification_settings.auto_responder.footer.message": "Ange ett anpassat meddelande som skickas automatiskt som svar på direkta meddelanden, t.ex. ett svar om att du inte är på kontoret eller har semester. Om du aktiverar den här inställningen ändras din status till \"Out of Office\" och notifieringar inaktiveras.", "notification_settings.auto_responder.message": "Meddelande", "notification_settings.auto_responder.to.enable": "Aktivera automatiska svar", + "notification_settings.call_notification": "Notifiering om samtal", + "notification_settings.calls": "Notifiering om samtal", + "notification_settings.calls.callsInfo": "Obs: Tyst läge måste vara avaktiverat för att du ska kunna höra förhandsvisningen av ringsignalen.", + "notification_settings.calls.calm": "Lugn", + "notification_settings.calls.cheerful": "Gladlynt", + "notification_settings.calls.dynamic": "Dynamisk", + "notification_settings.calls.enable_sound": "Notifieringsljud för inkommande samtal", + "notification_settings.calls.urgent": "Brådskande", + "notification_settings.calls_off": "Av", + "notification_settings.calls_on": "På", "notification_settings.email": "Mejlnotifieringar", "notification_settings.email.crt.emailInfo": "När aktiverad kommer ett svar i en tråd du följer att generera en notifiering via mejl", "notification_settings.email.crt.send": "Notifiering vid svar i trådar", @@ -940,6 +994,8 @@ "screen.search.results.filter.title": "Filtrera efter filtyp", "screen.search.results.filter.videos": "Videor", "screen.search.title": "Sök", + "screens.channel_bookmark_add": "Lägg till ett bokmärke", + "screens.channel_bookmark_edit": "Redigera bokmärke", "screens.channel_edit": "Redigera kanal", "screens.channel_edit_header": "Redigera kanalens sidhuvud", "screens.channel_info": "Information om kanalen", @@ -953,6 +1009,7 @@ "select_team.title": "Välj ett team", "server.invalid.certificate.description": "Servercertifikatet på servern är felaktigt.\nDet kan vara så att du ansluter till en server som låtsas vara \"{hostname}\" och din information skulle kunna riskera läcka till obehöriga.", "server.invalid.certificate.title": "Ogiltigt SSL-certifikat", + "server.invalid.pinning.title": "Ogiltigt nålat SSL-certifikat", "server.logout.alert_description": "Alla tillhörande uppgifter kommer tas bort", "server.logout.alert_title": "Är du säker på att du vill logga ut från {displayName}?", "server.remove.alert_description": "Detta kommer att ta bort den från listan över servrar. Allt tillhörande data tas bort", @@ -985,7 +1042,7 @@ "settings.about.server.version": "Serverversion: {version} (Build {buildNumber}", "settings.about.server.version.noBuild": "Serverversion: {version}", "settings.about.server.version.title": "Serverversion:", - "settings.about.server.version.value": "{version} (Build {number})", + "settings.about.server.version.value": "{version} (Build {buildNumber})", "settings.advanced.cancel": "Avbryt", "settings.advanced.delete": "Radera", "settings.advanced.delete_data": "Ta bort lokala filer", @@ -1034,6 +1091,7 @@ "skintone_selector.tooltip.title": "Välj standard-hudton", "smobile.search.recent_title": "Senaste sökningar i {teamName}", "snack.bar.channel.members.added": "{numMembers, number} {numMembers, plural, one {medlem tillagd} other {medlemmar tillagda}}", + "snack.bar.code.copied": "Kod kopierad till urklipp", "snack.bar.favorited.channel": "Den här kanalen markerades som favorit", "snack.bar.following.thread": "Följer tråden", "snack.bar.info.copied": "Kopierat till clipboard", @@ -1057,6 +1115,7 @@ "suggestion.mention.groups": "Gruppomnämnanden", "suggestion.mention.here": "Notifierar alla anslutna i kanalen", "suggestion.mention.morechannels": "Andra kanaler", + "suggestion.mention.nonmembers": "Inte i kanalen", "suggestion.mention.special": "Speciella omnämnanden", "suggestion.mention.users": "Användare", "suggestion.search.direct": "Direktmeddelande", diff --git a/assets/base/i18n/tr.json b/assets/base/i18n/tr.json index 540ea3af9e4..5c50acbc7da 100644 --- a/assets/base/i18n/tr.json +++ b/assets/base/i18n/tr.json @@ -96,6 +96,28 @@ "camera_type.video.option": "Görüntü kaydet", "center_panel.archived.closeChannel": "Kanalı kapat", "channel_add_members.add_members.button": "Üye ekle", + "channel_bookmark.add.detail_title": "Başlık", + "channel_bookmark.add.emoji": "Emoji ekle", + "channel_bookmark.add.failed_title": "Yer imi eklenirken sorun çıktı", + "channel_bookmark.add.file_cancel": "İptal", + "channel_bookmark.add.file_title": "Ek dosya", + "channel_bookmark.add.file_upload_error": "Dosya yüklenirken sorun çıktı. Lütfen yeniden deneyin.", + "channel_bookmark.add.file_uploading": "Yükleniyor... ({progress}%)", + "channel_bookmark.add_edit.failed_desc": "Ayrıntılar: {error}", + "channel_bookmark.copy_option": "Bağlantıyı kopyala", + "channel_bookmark.delete.confirm": "{displayName} yer imini silmek istediğinize emin misiniz?", + "channel_bookmark.delete.confirm_title": "Yer imini sil", + "channel_bookmark.delete.failed_detail": "Ayrıntılar: {error}", + "channel_bookmark.delete.failed_title": "Yer imi silinirken sorun çıktı", + "channel_bookmark.delete.yes": "Evet", + "channel_bookmark.delete_option": "Sil", + "channel_bookmark.edit.failed_title": "Yer imi düzenlenirken sorun çıktı", + "channel_bookmark.edit.save_button": "Kaydet", + "channel_bookmark.edit_option": "Düzenle", + "channel_bookmark.share_option": "Paylaş", + "channel_bookmark_add.link": "Bağlantı", + "channel_bookmark_add.link.input.description": "Bir gönderi ya da dosyaya bir bağlantı ya da herhangi bir dış bağlantı ekleyin", + "channel_bookmark_add.link.invalid": "Lütfen geçerli bir bağlantı yazın", "channel_files.empty.paragraph": "Bu kanala eklenmiş dosyalar burada görüntülenir.", "channel_files.empty.title": "Henüz bir dosya yok", "channel_files.noFiles.paragraph": "Bu kanalda ayarlanmış süzgeçlere uygun bir dosya yok", @@ -103,6 +125,10 @@ "channel_header.directchannel.you": "{displayName} (siz)", "channel_header.info": "Bilgileri görüntüle", "channel_header.member_count": "{count, plural, one {üye} other {üye}}", + "channel_info.add_bookmark": "Yer imi ekle", + "channel_info.add_bookmark.file": "Dosya ekle", + "channel_info.add_bookmark.link": "Bağlantı ekle", + "channel_info.add_bookmark.max_reached": "Bu kanal için en fazla yer imi sayısına ulaşıldı.", "channel_info.add_members": "Üye ekle", "channel_info.alertNo": "Hayır", "channel_info.alertYes": "Evet", @@ -445,9 +471,9 @@ "mobile.calls_call_ended": "Çağrı sonlandırıldı", "mobile.calls_call_screen": "Ara", "mobile.calls_call_thread": "Çağrı konusu", + "mobile.calls_cancel": "İptal", "mobile.calls_captions": "Alt yazılar", "mobile.calls_captions_turned_on": "Canlı alt yazılar açıldı", - "mobile.calls_current_call": "Geçerli çağrı", "mobile.calls_disable": "Çağrıları devre dışı bırak", "mobile.calls_dismiss": "Yok say", "mobile.calls_enable": "Çağrıları etkinleştir", @@ -460,20 +486,32 @@ "mobile.calls_ended_at": "Sonlandırılma zamanı", "mobile.calls_error_message": "Hata: {error}", "mobile.calls_error_title": "Hata", + "mobile.calls_group_calls_not_available": "Çağrılar yalnızca doğrudan ileti kanallarında yapılabilir.", "mobile.calls_headset": "Kulaklık", "mobile.calls_hide_cc": "Canlı alt yazıları gizle", "mobile.calls_host": "sunucu", + "mobile.calls_host_controls": "Sunucu denetimleri", + "mobile.calls_host_end_confirm": "Çağrıyı herkes için sonlandır", + "mobile.calls_host_leave_confirm": "Çağrıdan ayrıl", + "mobile.calls_host_leave_title": "Bu çağrıdan ayrılmak istediğinize emin misiniz?", "mobile.calls_host_rec": "Bu toplantıyı kaydediyorsunuz. Bu toplantının kaydedildiğinin herkese bildirilmesini değerlendirin.", "mobile.calls_host_rec_error": "Lütfen yeniden kaydetmeyi deneyin. Sorunu gidermekte yardımcı olması için sistem yöneticiniz ile de görüşebilirsiniz.", "mobile.calls_host_rec_error_title": "Kayıtta bir sorun çıktı", + "mobile.calls_host_rec_stop_body": "Çağrı kaydetme işlenecek ve çağrı yazışmasına eklenecek. Kaydı durdurmak istediğinize emin misiniz?", + "mobile.calls_host_rec_stop_confirm": "Kaydı durdur", + "mobile.calls_host_rec_stop_title": "Kaydı durdur", "mobile.calls_host_rec_stopped": "İşlenmesi tamamlandığında, kaydı bu görüşmenin sohbet konusunda bulabilirsiniz.", "mobile.calls_host_rec_stopped_title": "Kayıt durduruldu. İşleniyor...", "mobile.calls_host_rec_title": "Kaydediyorsunuz", + "mobile.calls_host_rec_trans_stop_body": "Çağrı kaydı ve yazıya dökme dosyaları işlenecek ve çağrı yazışmasına eklenecek. Kaydı ve yazıya dökülmesini durdurmak istediğinize emin misiniz?", + "mobile.calls_host_rec_trans_stop_title": "Kaydı ve yazıya dökmeyi durdur", "mobile.calls_host_transcription": "Bu toplantıya katılan kişilere görüntü ve sohbet kayıtlarının alındığını bildirmeyi değerlendirin.", "mobile.calls_host_transcription_title": "Kayıt ve yazıya dökme işlemine başlandı", "mobile.calls_incoming_dm": "{name} sizi bir görüşmeye davet etti", "mobile.calls_incoming_gm": "{name} sizi {num, plural, one {kişinin} other {kişinin}} olduğu bir görüşmeye davet etti", + "mobile.calls_join": "Katıl", "mobile.calls_join_call": "Çağrıya katıl", + "mobile.calls_joining": "Katılınıyor...", "mobile.calls_lasted": "{duration} sürdü", "mobile.calls_leave": "Ayrıl", "mobile.calls_leave_call": "Çağrıdan ayrıl", @@ -481,11 +519,13 @@ "mobile.calls_limit_msg_GA": "{maxParticipants} üzerinde katılımcılı grup aramaları yapabilmek için Cloud Professional ya da Cloud Enterprise tarifesine yükseltin.", "mobile.calls_limit_reached": "Katılımcı sayısı sınırına ulaşıldı", "mobile.calls_lower_hand": "Eli indir", + "mobile.calls_make_host": "Sunucu yap", "mobile.calls_mic_error": "Katılmak için, Ayarlar bölümüne giderek Mattermost için mikrofona erişme izni verin.", "mobile.calls_more": "Diğer", "mobile.calls_mute": "Sesi kapat", + "mobile.calls_mute_others": "Diğerlerinin sesini kapat", + "mobile.calls_mute_participant": "Katılımcının sesini kapat", "mobile.calls_name_is_talking_postfix": "konuşuyor...", - "mobile.calls_name_started_call": "{name} bir çağrı başlattı", "mobile.calls_noone_talking": "Kimse konuşmuyor", "mobile.calls_not_available_msg": "Lütfen bu özelliği etkinleştirmesi sistem yöneticiniz ile görüşün.", "mobile.calls_not_available_option": "(Kullanılamaz)", @@ -499,17 +539,24 @@ "mobile.calls_participant_rec_title": "Kaydediliyor", "mobile.calls_participant_transcription": "Düzenleyici, bu toplantının kaydını ve yazı dökme işlemlerini başlattı. Toplantıda kalarak kayıt ve yazıya dökme işlemlerine rıza vermiş olursunuz.", "mobile.calls_participant_transcription_title": "Kayıt ve yazıya dökme işlemleri yapılıyor", + "mobile.calls_participants": "Katılımcılar", + "mobile.calls_people": "Kişiler", "mobile.calls_phone": "Telefon", "mobile.calls_quality_warning": "Kararsız ağ koşulları nedeniyle çağrı kalitesi düşebilir.", "mobile.calls_raise_hand": "El kaldır", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# diğer kişi }}el kaldırdı", "mobile.calls_react": "Tepki ver", - "mobile.calls_rec": "kayıt", "mobile.calls_record": "Kaydet", "mobile.calls_recording_start_in_progress": "Sürmekte olan bir kayıt var.", "mobile.calls_recording_start_no_permissions": "Kayıt başlatma izniniz yok. Lütfen çağrı sahibinden kaydı başlatmasını isteyin.", "mobile.calls_recording_stop_no_permissions": "Kaydı durdurma izniniz yok. Lütfen çağrı sahibinden kaydı durdurmasını isteyin.", "mobile.calls_recording_stop_none_in_progress": "Sürmekte olan bir kayıt yok.", + "mobile.calls_remove": "Çıkar", + "mobile.calls_remove_alert_body": "{displayName} katılımcısını aramadan çıkarmak istediğinize emin misiniz? ", + "mobile.calls_remove_alert_title": "Katılımcıyı çıkar", + "mobile.calls_remove_participant": "Çağrıdan çıkar", + "mobile.calls_removed_alert_body": "Sunucu sizi çağrıdan çıkardı.", + "mobile.calls_removed_alert_title": "Çağrıdan çıkarıldınız", "mobile.calls_request_message": "Çağrılar şu anda deneme kipinde çalışıyor ve bunları yalnızca sistem yöneticileri başlatabilir. Yardım almak için doğrudan sistem yöneticiniz ile görüşün", "mobile.calls_request_title": "Çağrılar şu anda etkinleştirilmemiş", "mobile.calls_see_logs": "Sunucu günlüklerine bakın", @@ -517,7 +564,10 @@ "mobile.calls_speaker": "Konuşmacı", "mobile.calls_start_call": "Çağrı başlat", "mobile.calls_start_call_exists": "Kanalda zaten süren bir çağrı var.", + "mobile.calls_started_call": "Çağrı başlatıldı", + "mobile.calls_starting": "Başlatılıyor...", "mobile.calls_stop_recording": "Kaydı durdur", + "mobile.calls_stop_screenshare": "Ekran paylaşımını durdur", "mobile.calls_tablet": "Tablet", "mobile.calls_thread": "Konu", "mobile.calls_unmute": "Sesi aç", @@ -525,6 +575,7 @@ "mobile.calls_user_left_channel_error_title": "Kanaldan ayrıldınız", "mobile.calls_user_removed_from_channel_error_message": "Kanaldan çıkarıldınız ve arama sonlandırıldı.", "mobile.calls_user_removed_from_channel_error_title": "Kanaldan çıkarıldınız", + "mobile.calls_view_profile": "Profili görüntüle", "mobile.calls_viewing_screen": "{name} katılımcısının ekranını görüntülüyorsunuz", "mobile.calls_you": "(siz)", "mobile.calls_you_2": "Siz", @@ -606,11 +657,11 @@ "mobile.link.error.title": "Hata", "mobile.login_options.cant_heading": "Oturum açılamadı", "mobile.login_options.enter_credentials": "Oturum açma bilgilerinizi aşağıya yazın.", + "mobile.login_options.entraid": "Entra ID", "mobile.login_options.gitlab": "GitLab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "Hesabınızda oturum açın", "mobile.login_options.none": "Henüz hesabınızda oturum açamazsınız. En az bir oturum açma seçeneği yapılandırılmış olmalıdır. Yardımcı olması için sistem yöneticiniz ile görüşün.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Aşağıdan bir oturum açma seçeneği seçin.", @@ -631,9 +682,7 @@ "mobile.manage_members.section_title_members": "ÜYELER", "mobile.managed.blocked_by": "{vendor} tarafından engellenmiş", "mobile.managed.exit": "Çık", - "mobile.managed.jailbreak": "Jailbreak uygulanmış aygıtlara {vendor} tarafından güvenilmiyor. \n\nNedeni: {reason}\n\n\n\nHata ayıklama bilgileri: {debug}\n\nLütfen uygulamadan çıkın.", - "mobile.managed.jailbreak_no_debug_info": "Kullanılamaz", - "mobile.managed.jailbreak_no_reason": "Kullanılamaz", + "mobile.managed.jailbreak": "Jailbreak ya da root uygulanmış aygıtlara {vendor} tarafından güvenilmez. \n\nŞimdi uygulama kapatılacak.", "mobile.managed.not_secured.android": "Bu aygıtta Mattermost kullanılabilmesi için ekran kilidi güvenliğinin etkinleştirilmesi gerekir.", "mobile.managed.not_secured.ios": "Bu aygıtta Mattermost kullanılabilmesi için parola güvenliğinin etkinleştirilmesi gerekir.\n\nAyarlar > Face ID ve Parola bölümünden ayarlayabilirsiniz.", "mobile.managed.not_secured.ios.touchId": "Bu aygıtta Mattermost kullanılabilmesi için parola güvenliğinin etkinleştirilmesi gerekir.\n\nAyarlar > Touch ID ve Parola bölümünden ayarlayabilirsiniz.", @@ -655,8 +704,9 @@ "mobile.oauth.failed_to_login": "Oturum açma girişimi başarısız oldu. Lütfen yeniden deneyin.", "mobile.oauth.failed_to_open_link": "Bağlantı açılamadı. Lütfen yeniden deneyin.", "mobile.oauth.failed_to_open_link_no_browser": "Bağlantı açılamadı. Lütfen aygıt üzerinde bir tarayıcının kurulu olduğundan emin olun.", - "mobile.oauth.something_wrong": "Bir şeyler ters gitti", "mobile.oauth.something_wrong.okButton": "Tamam", + "mobile.oauth.success.description": "Oturum açılıyor, lütfen bekleyin...", + "mobile.oauth.success.title": "Kimlik doğrulandı", "mobile.oauth.switch_to_browser": "Oturum açma hizmeti sağlayıcınıza yönlendiriliyorsunuz", "mobile.oauth.switch_to_browser.error_title": "Oturum açma hatası", "mobile.oauth.switch_to_browser.title": "Yönlendiriliyor...", @@ -766,6 +816,7 @@ "more_messages.text": "{count} new {count, plural, one {ileti} other {ileti}}", "msg_typing.areTyping": "{users} ve {last} yazıyor...", "msg_typing.isTyping": "{user} yazıyor...", + "native.ios.notifications.not_verified": "Bu bildirimi sunucu ile doğrulayamadık", "notification.message_not_found": "İleti bulunamadı", "notification.no_connection": "Sunucuya ulaşılamadığından bildirimle ilgili özel ileti bilgileri alınamadı.", "notification.no_post": "İleti bulunamadı.", @@ -776,6 +827,16 @@ "notification_settings.auto_responder.footer.message": "İşyeri dışındayken ya da tatildeyken doğrudan iletilere olarak otomatik olarak gönderilecek özel bir yanıt iletisi ayarlayın. Etkinleştirildiğinde, durumunuz İşyeri dışında olarak değiştirilir ve bildirimler devre dışı bırakılır.", "notification_settings.auto_responder.message": "İleti", "notification_settings.auto_responder.to.enable": "Otomatik yanıtlar kullanılsın", + "notification_settings.call_notification": "Çağrı bildirimleri", + "notification_settings.calls": "Çağrı bildirimleri", + "notification_settings.calls.callsInfo": "Not: Zil sesi ön izlemesini duyabilmeniz için sessiz kipi kapalı olmalıdır.", + "notification_settings.calls.calm": "Sakin", + "notification_settings.calls.cheerful": "Neşeli", + "notification_settings.calls.dynamic": "Dinamik", + "notification_settings.calls.enable_sound": "Gelen çağrıların bildirim sesi", + "notification_settings.calls.urgent": "Acil", + "notification_settings.calls_off": "Kapalı", + "notification_settings.calls_on": "Açık", "notification_settings.email": "E-posta bildirimleri", "notification_settings.email.crt.emailInfo": "Etkinleştirildiğinde, izlediğiniz konulara verilen yanıtlar için bir e-posta bildirimi alırsınız", "notification_settings.email.crt.send": "Konu yanıtı bildirimleri", @@ -933,6 +994,8 @@ "screen.search.results.filter.title": "Dosya türüne göre süzme", "screen.search.results.filter.videos": "Görüntüler", "screen.search.title": "Arama", + "screens.channel_bookmark_add": "Yer imi ekle", + "screens.channel_bookmark_edit": "Yer imini düzenle", "screens.channel_edit": "Kanalı düzenle", "screens.channel_edit_header": "Kanal başlığını düzenle", "screens.channel_info": "Kanal bilgileri", @@ -946,6 +1009,7 @@ "select_team.title": "Bir takım seçin", "server.invalid.certificate.description": "Bu sunucunun sertifikası geçersiz.\n\"{hostname}\" gibi davranan bir sunucuya bağlanıyor olabilirsiniz. Bu durumda gizli bilgilerinizi tehlikeye atabilir.", "server.invalid.certificate.title": "SSL sertifikası geçersiz", + "server.invalid.pinning.title": "Sabitlenmiş SSL sertifikası geçersiz", "server.logout.alert_description": "İlişkili tüm veriler silinecek", "server.logout.alert_title": "{displayName} oturumunu kapatmak istediğinize emin misiniz?", "server.remove.alert_description": "Bu işlem, sunucuyu listenizden kaldıracak. İlişkili tüm veriler silinecek", @@ -978,7 +1042,7 @@ "settings.about.server.version": "Sunucu sürümü: {version} (Yapım {buildNumber}", "settings.about.server.version.noBuild": "Sunucu sürümü: {version}", "settings.about.server.version.title": "Sunucu sürümü:", - "settings.about.server.version.value": "{version} (Yapım {number})", + "settings.about.server.version.value": "{version} (Yapım {buildNumber})", "settings.advanced.cancel": "İptal", "settings.advanced.delete": "Sil", "settings.advanced.delete_data": "Yerel dosyaları sil", @@ -1050,7 +1114,9 @@ "suggestion.mention.groups": "Grup anmaları", "suggestion.mention.here": "Bu kanalda çevrim içi olan herkese bildirilir", "suggestion.mention.morechannels": "Diğer kanallar", + "suggestion.mention.nonmembers": "Kanalda değil", "suggestion.mention.special": "Özel anmalar", + "suggestion.mention.users": "Kullanıcılar", "suggestion.search.direct": "Doğrudan iletiler", "suggestion.search.private": "Özel kanallar", "suggestion.search.public": "Herkese açık kanallar", diff --git a/assets/base/i18n/uk.json b/assets/base/i18n/uk.json index 6a9f64ad99c..4bd8a8b9fbe 100644 --- a/assets/base/i18n/uk.json +++ b/assets/base/i18n/uk.json @@ -420,7 +420,6 @@ "mobile.calls_call_ended": "Дзвінок завершено", "mobile.calls_call_screen": "Зателефонувати", "mobile.calls_call_thread": "Потік дзвінка", - "mobile.calls_current_call": "Поточний дзвінок", "mobile.calls_disable": "Вимкнути дзвінки", "mobile.calls_dismiss": "Відбій", "mobile.calls_enable": "Увімкнути дзвінки", @@ -452,7 +451,6 @@ "mobile.calls_more": "Більше", "mobile.calls_mute": "Вимкнути звук", "mobile.calls_name_is_talking_postfix": "розмовляє...", - "mobile.calls_name_started_call": "{ім'я} розпочав дзвінок", "mobile.calls_noone_talking": "Ніхто не розмовляє", "mobile.calls_not_available_msg": "Щоб увімкнути цю функцію, зверніться до системного адміністратора.", "mobile.calls_not_available_option": "(Недоступно)", @@ -469,7 +467,6 @@ "mobile.calls_raise_hand": "Підніміть руку", "mobile.calls_raised_hand": "{ім'я} {число, множина, =0 {} інше {+# більше }}підняв руку", "mobile.calls_react": "Реакція", - "mobile.calls_rec": "Запис", "mobile.calls_record": "Запис", "mobile.calls_recording_start_in_progress": "Запис вже триває.", "mobile.calls_recording_start_no_permissions": "У вас немає дозволу на початок запису. Попросіть абонента розпочати запис.", @@ -558,7 +555,6 @@ "mobile.login_options.google": "Google", "mobile.login_options.heading": "Увійдіть до свого облікового запису", "mobile.login_options.none": "Ви ще не можете увійти до свого облікового запису. Необхідно налаштувати принаймні один варіант входу. Зверніться за допомогою до системного адміністратора.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Відкритий ідентифікатор", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Виберіть варіант входу нижче.", @@ -580,8 +576,6 @@ "mobile.managed.blocked_by": "Заблоковано {vendor}", "mobile.managed.exit": "Вхід", "mobile.managed.jailbreak": "Пристрої з Jailbroken не є довіреними {постачальник}.\n\nПричина {причина}\n\n\nНалагоджувальна інформація: {налагодження}\n\nВийдіть з програми, будь ласка.", - "mobile.managed.jailbreak_no_debug_info": "Недоступно", - "mobile.managed.jailbreak_no_reason": "Недоступно", "mobile.managed.not_secured.android": "Цей пристрій повинен бути захищений блокуванням екрана, щоб використовувати Mattermost.", "mobile.managed.not_secured.ios": "Щоб користуватися Mattermost, цей пристрій потрібно захистити паролем.\n\nПерейдіть до Налаштування > Face ID та пароль.", "mobile.managed.not_secured.ios.touchId": "Щоб користуватися Mattermost, цей пристрій потрібно захистити паролем.\n\nПерейдіть до Налаштування > Touch ID та пароль.", @@ -600,9 +594,6 @@ "mobile.no_results_with_term.files": "Немає файлів, що відповідають \"{термін}\"", "mobile.no_results_with_term.messages": "Нічого не знайдено для \"{термін}\"", "mobile.oauth.failed_to_login": "Ваша спроба входу була невдалою. Спробуйте ще раз.", - "mobile.oauth.failed_to_open_link": "Посилання не вдалося відкрити. Спробуйте ще раз.", - "mobile.oauth.failed_to_open_link_no_browser": "Посилання не вдалося відкрити. Переконайтеся, що на пристрої встановлено браузер.", - "mobile.oauth.something_wrong": "Щось пішло не так", "mobile.oauth.something_wrong.okButton": "ОК", "mobile.oauth.switch_to_browser": "Вас перенаправлено до вашого постачальника послуг входу", "mobile.oauth.switch_to_browser.error_title": "Помилка входу в систему", diff --git a/assets/base/i18n/vi.json b/assets/base/i18n/vi.json index 48d908cbed8..47b751f309f 100644 --- a/assets/base/i18n/vi.json +++ b/assets/base/i18n/vi.json @@ -430,7 +430,6 @@ "mobile.calls_call_ended": "Cuộc gọi kết thúc", "mobile.calls_call_screen": "Gọi", "mobile.calls_call_thread": "Chủ đề cuộc gọi", - "mobile.calls_current_call": "Cuộc gọi hiện tại", "mobile.calls_disable": "Tắt chức năng cuộc gọi", "mobile.calls_dismiss": "Bỏ qua", "mobile.calls_enable": "Bật cuộc gọi", @@ -464,7 +463,6 @@ "mobile.calls_more": "Thêm", "mobile.calls_mute": "Tắt tiếng", "mobile.calls_name_is_talking_postfix": "đang nói...", - "mobile.calls_name_started_call": "{name} đã bắt đầu cuộc gọi", "mobile.calls_noone_talking": "không ai nói chuyện", "mobile.calls_not_available_msg": "Vui lòng liên hệ với Quản trị viên hệ thống của bạn để kích hoạt tính năng này.", "mobile.calls_not_available_option": "(Không có sẵn)", @@ -481,7 +479,6 @@ "mobile.calls_raise_hand": "Giơ tay", "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# người nữa }}đã giơ tay", "mobile.calls_react": "Phản ứng", - "mobile.calls_rec": "ghi", "mobile.calls_record": "Ghi", "mobile.calls_recording_start_in_progress": "Một bản ghi đang được tiến hành.", "mobile.calls_recording_start_no_permissions": "Bạn không có quyền bắt đầu ghi âm. Vui lòng yêu cầu người tổ chức cuộc gọi bắt đầu ghi âm.", @@ -582,7 +579,6 @@ "mobile.login_options.google": "Google", "mobile.login_options.heading": "Đăng nhập vào tài khoản của bạn", "mobile.login_options.none": "Bạn chưa thể đăng nhập vào tài khoản của mình. Ít nhất một tùy chọn đăng nhập phải được cấu hình. Liên hệ với Quản trị viên hệ thống của bạn để được hỗ trợ.", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "Chọn một tùy chọn đăng nhập bên dưới.", @@ -604,8 +600,6 @@ "mobile.managed.blocked_by": "Bị chặn bởi {vendor}", "mobile.managed.exit": "Chỉnh sửa", "mobile.managed.jailbreak": "Các thiết bị bẻ khóa không được {vendor} tin cậy.\n\nLý do {reason}\n\n\n\nThông tin gỡ lỗi: {debug}\n\nVui lòng thoát khỏi ứng dụng.", - "mobile.managed.jailbreak_no_debug_info": "Không có sẵn", - "mobile.managed.jailbreak_no_reason": "Không có sẵn", "mobile.managed.not_secured.android": "Thiết bị này phải được bảo mật bằng khóa màn hình để sử dụng Mattermost.", "mobile.managed.not_secured.ios": "Thiết bị này phải được bảo mật bằng mật mã để sử dụng Mattermost.\n\nChuyển đến Cài đặt > Face ID & Mật mã.", "mobile.managed.not_secured.ios.touchId": "Thiết bị này phải được bảo mật bằng mật mã để sử dụng Mattermost.\n\nChuyển đến Cài đặt > Face ID & Mật mã.", @@ -624,9 +618,6 @@ "mobile.no_results_with_term.files": "Không có tệp nào phù hợp với “{term}”", "mobile.no_results_with_term.messages": "Không tìm thấy kết quả phù hợp cho “{term}”", "mobile.oauth.failed_to_login": "Nỗ lực đăng nhập của bạn không thành công. Vui lòng thử lại.", - "mobile.oauth.failed_to_open_link": "Liên kết không mở được. Vui lòng thử lại.", - "mobile.oauth.failed_to_open_link_no_browser": "Liên kết không mở được. Vui lòng xác minh xem trình duyệt có được cài đặt trong không gian hiện tại hay không.", - "mobile.oauth.something_wrong": "Đã xảy ra sự cố", "mobile.oauth.something_wrong.okButton": "Đồng ý", "mobile.oauth.switch_to_browser": "Vui lòng sử dụng trình duyệt của bạn để hoàn tất quá trình đăng nhập", "mobile.oauth.switch_to_browser.error_title": "Lỗi đăng nhập", diff --git a/assets/base/i18n/zh-CN.json b/assets/base/i18n/zh-CN.json index d9354eb7395..745e73f309c 100644 --- a/assets/base/i18n/zh-CN.json +++ b/assets/base/i18n/zh-CN.json @@ -93,9 +93,31 @@ "browse_channels.showSharedChannels": "显示:共享频道", "browse_channels.title": "浏览频道", "camera_type.photo.option": "拍摄照片", - "camera_type.video.option": "录视频", + "camera_type.video.option": "录制视频", "center_panel.archived.closeChannel": "关闭频道", "channel_add_members.add_members.button": "添加成员", + "channel_bookmark.add.detail_title": "标题", + "channel_bookmark.add.emoji": "添加表情符", + "channel_bookmark.add.failed_title": "添加书签时出错", + "channel_bookmark.add.file_cancel": "取消", + "channel_bookmark.add.file_title": "附件", + "channel_bookmark.add.file_upload_error": "上传文件时出错。请重试。", + "channel_bookmark.add.file_uploading": "上传中…({progress}%)", + "channel_bookmark.add_edit.failed_desc": "详情:{error}", + "channel_bookmark.copy_option": "复制链接", + "channel_bookmark.delete.confirm": "您确定要删除书签{displayName}吗?", + "channel_bookmark.delete.confirm_title": "删除书签", + "channel_bookmark.delete.failed_detail": "详情:{error}", + "channel_bookmark.delete.failed_title": "删除书签时出错", + "channel_bookmark.delete.yes": "是", + "channel_bookmark.delete_option": "删除", + "channel_bookmark.edit.failed_title": "编辑书签时出错", + "channel_bookmark.edit.save_button": "保存", + "channel_bookmark.edit_option": "编辑", + "channel_bookmark.share_option": "分享", + "channel_bookmark_add.link": "链接", + "channel_bookmark_add.link.input.description": "添加一个指向任何消息、文件的链接,或任何外部链接", + "channel_bookmark_add.link.invalid": "请输入有效链接", "channel_files.empty.paragraph": "在此频道中发布的文件将显示在此处。", "channel_files.empty.title": "还没有文件", "channel_files.noFiles.paragraph": "此频道未包含任何应用的过滤器的文件", @@ -103,6 +125,10 @@ "channel_header.directchannel.you": "{displayName} (您)", "channel_header.info": "频道信息", "channel_header.member_count": "{count, plural, other {# 位成员}}", + "channel_info.add_bookmark": "添加书签", + "channel_info.add_bookmark.file": "附加文件", + "channel_info.add_bookmark.link": "添加链接", + "channel_info.add_bookmark.max_reached": "此频道已达到书签数量上限。", "channel_info.add_members": "添加成员", "channel_info.alertNo": "不", "channel_info.alertYes": "是", @@ -445,9 +471,9 @@ "mobile.calls_call_ended": "通话已结束", "mobile.calls_call_screen": "通话", "mobile.calls_call_thread": "通话主题", + "mobile.calls_cancel": "取消", "mobile.calls_captions": "字幕", "mobile.calls_captions_turned_on": "实时字幕已打开", - "mobile.calls_current_call": "目前的通话", "mobile.calls_disable": "无效的通话", "mobile.calls_dismiss": "驳回", "mobile.calls_enable": "启动通话", @@ -460,34 +486,46 @@ "mobile.calls_ended_at": "结束于", "mobile.calls_error_message": "错误:{error}", "mobile.calls_error_title": "错误", + "mobile.calls_group_calls_not_available": "通话仅在私信中可用。", "mobile.calls_headset": "耳机", "mobile.calls_hide_cc": "隐藏实时字幕", "mobile.calls_host": "主持人", "mobile.calls_host_controls": "主持人控制", - "mobile.calls_host_rec": "您正在录制此会议。让所有人知道这个会议正在录制可能是一个不错的主意。", + "mobile.calls_host_end_confirm": "为所有人结束通话", + "mobile.calls_host_leave_confirm": "离开通话", + "mobile.calls_host_leave_title": "您确定要离开此通话吗?", + "mobile.calls_host_rec": "您正在录制此会议。考虑让所有人知道此次会议将被录制。", "mobile.calls_host_rec_error": "请尝试再次录制。您也可以联系系统管理员寻求帮助。", - "mobile.calls_host_rec_error_title": "此录制有错误发生", - "mobile.calls_host_rec_stopped": "当处理完成时您可以在此通话谈话主题中找到此次录音。", + "mobile.calls_host_rec_error_title": "此录制出现错误", + "mobile.calls_host_rec_stop_body": "通话录制将被处理并发布于通话的对话中。您确定要停止录制吗?", + "mobile.calls_host_rec_stop_confirm": "停止录制", + "mobile.calls_host_rec_stop_title": "停止录制", + "mobile.calls_host_rec_stopped": "处理完成后,您可以在此通话的对话中找到录制。", "mobile.calls_host_rec_stopped_title": "录制已经停止。处理中…", "mobile.calls_host_rec_title": "您正在录制中", + "mobile.calls_host_rec_trans_stop_body": "通话录制和转录文件将被处理并发布于通话的对话中。您确定要停止录制和转录吗?", + "mobile.calls_host_rec_trans_stop_title": "停止录制和转录", "mobile.calls_host_transcription": "考虑让每个人都知道这次会议正在被记录。", "mobile.calls_host_transcription_title": "记录已开始", "mobile.calls_incoming_dm": "{name}邀请您加入通话", "mobile.calls_incoming_gm": "{name}现邀请您与其他 {num, plural, other {# 人}}进行通话", + "mobile.calls_join": "加入", "mobile.calls_join_call": "加入通话", + "mobile.calls_joining": "加入中…", "mobile.calls_lasted": "通话时间{duration}", "mobile.calls_leave": "离开", "mobile.calls_leave_call": "离开通话", - "mobile.calls_limit_msg": "每个通话最的参加者人数为 {maxParticipants}。联系您的系统管理员增加人数上限。", + "mobile.calls_limit_msg": "每个通话最的参与者人数为 {maxParticipants}。联系您的系统管理员增加人数上限。", "mobile.calls_limit_msg_GA": "升级到云平台专业版或云平台企业版以启用超过 {maxParticipants} 位参与者的群组通话。", - "mobile.calls_limit_reached": "达到参加者上限", + "mobile.calls_limit_reached": "达到参与者上限", "mobile.calls_lower_hand": "放下手", "mobile.calls_make_host": "使其成为主持人", "mobile.calls_mic_error": "打开设置允许Mattermost访问您的麦克风权限用来加入。", "mobile.calls_more": "更多", "mobile.calls_mute": "静音", + "mobile.calls_mute_others": "静音其他人", + "mobile.calls_mute_participant": "静音参与者", "mobile.calls_name_is_talking_postfix": "正在说话…", - "mobile.calls_name_started_call": "{name}开启了通话", "mobile.calls_noone_talking": "没有人发言", "mobile.calls_not_available_msg": "请联系您的系统管理员打开此功能。", "mobile.calls_not_available_option": "(当前无效)", @@ -497,10 +535,10 @@ "mobile.calls_okay": "好的", "mobile.calls_open_channel": "打开频道", "mobile.calls_participant_limit_title_GA": "此通话达到容量上限", - "mobile.calls_participant_rec": "主持人已经开始录音本次会议。参加本次会议表示你默许声音被录制。", - "mobile.calls_participant_rec_title": "录制正在进行中", - "mobile.calls_participant_transcription": "主持人已开始会议记录。如果您仍在会议中,表明您已知晓正在被记录。", - "mobile.calls_participant_transcription_title": "正在记录", + "mobile.calls_participant_rec": "主持人已开始录制本次会议。留在本次会议中表示你允许被录制。", + "mobile.calls_participant_rec_title": "正在录制", + "mobile.calls_participant_transcription": "主持人已开始录制和转录本次会议。留在本次会议中表示你允许被录制和转录。", + "mobile.calls_participant_transcription_title": "正在录制和转录", "mobile.calls_participants": "参与者", "mobile.calls_people": "参与者", "mobile.calls_phone": "电话", @@ -508,12 +546,17 @@ "mobile.calls_raise_hand": "举手", "mobile.calls_raised_hand": "{name}{num, plural, =0 {} other {与其他 # 人}}举起了手", "mobile.calls_react": "反馈", - "mobile.calls_rec": "反馈", "mobile.calls_record": "录制", "mobile.calls_recording_start_in_progress": "录制已经在进行中了。", "mobile.calls_recording_start_no_permissions": "您没有开始录制的权限。请联系通话的主持人开始录制。", "mobile.calls_recording_stop_no_permissions": "您没有停止录制的权限。请联系通话的主持人停止录制。", "mobile.calls_recording_stop_none_in_progress": "没有录制正在进行。", + "mobile.calls_remove": "移除", + "mobile.calls_remove_alert_body": "您确定要从通话中移除{displayName}吗? ", + "mobile.calls_remove_alert_title": "移除参与者", + "mobile.calls_remove_participant": "从通话中移除", + "mobile.calls_removed_alert_body": "主持人已将你从通话中移除。", + "mobile.calls_removed_alert_title": "您已被从通话中移除", "mobile.calls_request_message": "通话当前正在运行在测试模式下,只有系统管理可以开始录制。请直接联系系统管理员寻求帮助", "mobile.calls_request_title": "通话或能当前没有被开启", "mobile.calls_see_logs": "查是服务器日志", @@ -521,7 +564,10 @@ "mobile.calls_speaker": "喇叭", "mobile.calls_start_call": "开始通话", "mobile.calls_start_call_exists": "此频道已经有通话正在进行。", + "mobile.calls_started_call": "通话已开始", + "mobile.calls_starting": "正在开始…", "mobile.calls_stop_recording": "停止录制", + "mobile.calls_stop_screenshare": "停止屏幕共享", "mobile.calls_tablet": "平板", "mobile.calls_thread": "主题", "mobile.calls_unmute": "解除静音", @@ -529,6 +575,7 @@ "mobile.calls_user_left_channel_error_title": "您已离开频道", "mobile.calls_user_removed_from_channel_error_message": "您已被从频道中移除并从通话中断开。", "mobile.calls_user_removed_from_channel_error_title": "您已被从频道中移除", + "mobile.calls_view_profile": "查看个人资料", "mobile.calls_viewing_screen": "您正在观看{name}的屏幕", "mobile.calls_you": "(您)", "mobile.calls_you_2": "您", @@ -610,11 +657,11 @@ "mobile.link.error.title": "错误", "mobile.login_options.cant_heading": "无法登录", "mobile.login_options.enter_credentials": "请在下方输入您登录的信息。", + "mobile.login_options.entraid": "Entra ID", "mobile.login_options.gitlab": "GitLab", "mobile.login_options.google": "Google", "mobile.login_options.heading": "登录您的账户", "mobile.login_options.none": "您还不能登录您的账户。必须配置至少一个登录选项。请联系您的系统管理员寻求帮助。", - "mobile.login_options.office365": "Office 365", "mobile.login_options.openid": "Open ID", "mobile.login_options.saml": "SAML", "mobile.login_options.select_option": "请在下方选择一个登录选项。", @@ -635,9 +682,7 @@ "mobile.manage_members.section_title_members": "管理者", "mobile.managed.blocked_by": "被 {vendor} 封锁", "mobile.managed.exit": "退出", - "mobile.managed.jailbreak": "越狱的设备不被 {vendor} 信任,\n\n原因 {reason}\n\n\n\n调试信息:{debug}\n\n请退出应用。", - "mobile.managed.jailbreak_no_debug_info": "无效", - "mobile.managed.jailbreak_no_reason": "无效", + "mobile.managed.jailbreak": "越狱或经过 root 的设备不被 {vendor} 信任。\n\n应用将现在退出。", "mobile.managed.not_secured.android": "此设备必须开启屏幕锁才能使用 Mattermost。", "mobile.managed.not_secured.ios": "此设备必须开启密码锁才能使用 Mattermost。\n\n前往设置 > 面容 ID 与密码。", "mobile.managed.not_secured.ios.touchId": "此设备必须开启密码锁才能使用 Mattermost。\n\n前往设置 > 面容 ID 与密码。", @@ -657,10 +702,11 @@ "mobile.no_results_with_term.files": "\"{term}\"没有匹配的文件", "mobile.no_results_with_term.messages": "\"{term}\"没有匹配的发现", "mobile.oauth.failed_to_login": "登入失败。请重试。", - "mobile.oauth.failed_to_open_link": "打开链接失败。请重试。", - "mobile.oauth.failed_to_open_link_no_browser": "此链接打开失败。请验证浏览器已经在设备上安装。", - "mobile.oauth.something_wrong": "出现了故障", + "mobile.oauth.failed_to_open_link": "链接打开失败。请重试。", + "mobile.oauth.failed_to_open_link_no_browser": "链接打开失败。请确认设备上已安装浏览器。", "mobile.oauth.something_wrong.okButton": "好的", + "mobile.oauth.success.description": "正在登录,请稍候…", + "mobile.oauth.success.title": "验证成功", "mobile.oauth.switch_to_browser": "您正在被切换到登录服务提供商", "mobile.oauth.switch_to_browser.error_title": "登录错误", "mobile.oauth.switch_to_browser.title": "切换中…", @@ -670,7 +716,7 @@ "mobile.onboarding.sign_in_to_get_started": "登录后开始", "mobile.open_dm.error": "我们无法打开私信 {displayName}。请检查您的网络连接再尝试。", "mobile.open_gm.error": "我们无法打开和这些用户的团体消息。请检查您的网络连接再尝试。", - "mobile.participants.header": "话题参与者", + "mobile.participants.header": "对话参与者", "mobile.permission_denied_dismiss": "不允许", "mobile.permission_denied_retry": "设定", "mobile.post.cancel": "取消", @@ -781,6 +827,16 @@ "notification_settings.auto_responder.footer.message": "设置自定义消息,以用来在离开办公室或者度假时在聊天中自动发出的回复。开启此设定将改变您的状态到“不在办公“状态并且关闭推送通知。", "notification_settings.auto_responder.message": "消息", "notification_settings.auto_responder.to.enable": "开启自动回复", + "notification_settings.call_notification": "通话通知", + "notification_settings.calls": "通话通知", + "notification_settings.calls.callsInfo": "注意:在试听铃声前需要关闭静音模式。", + "notification_settings.calls.calm": "Calm", + "notification_settings.calls.cheerful": "Cheerful", + "notification_settings.calls.dynamic": "Dynamic", + "notification_settings.calls.enable_sound": "来电铃声", + "notification_settings.calls.urgent": "Urgent", + "notification_settings.calls_off": "关", + "notification_settings.calls_on": "开", "notification_settings.email": "邮件通知", "notification_settings.email.crt.emailInfo": "当开启时,任何你关注话题的回复将发送邮件通知", "notification_settings.email.crt.send": "话题回复通知", @@ -938,6 +994,8 @@ "screen.search.results.filter.title": "通过文件类型过滤", "screen.search.results.filter.videos": "视频", "screen.search.title": "搜索", + "screens.channel_bookmark_add": "添加书签", + "screens.channel_bookmark_edit": "编辑书签", "screens.channel_edit": "编辑频道", "screens.channel_edit_header": "编辑频道标题", "screens.channel_info": "频道信息", @@ -951,6 +1009,7 @@ "select_team.title": "选择一个团队", "server.invalid.certificate.description": "此服务器的证书无效。\n您可能正在连接到一个假冒为 \"{hostname}\" 的服务器,这可能会危及您的机密信息。", "server.invalid.certificate.title": "无效的SSL证书", + "server.invalid.pinning.title": "无效的内嵌 SSL 证书", "server.logout.alert_description": "所以相关的数据都将被删除", "server.logout.alert_title": "您确定要登出{displayName}吗?", "server.remove.alert_description": "这将会从您的服务器列表中删除此项。所有关联的数据将会被删除", @@ -983,7 +1042,7 @@ "settings.about.server.version": "服务器版本:{version}(构建版本{buildNumber})", "settings.about.server.version.noBuild": "服务器版本:{version}", "settings.about.server.version.title": "服务器版本:", - "settings.about.server.version.value": "{version} (构建 {number})", + "settings.about.server.version.value": "{version} (构建 {buildNumber})", "settings.advanced.cancel": "取消", "settings.advanced.delete": "删除", "settings.advanced.delete_data": "删除本地文件", @@ -1055,7 +1114,9 @@ "suggestion.mention.groups": "群组提及", "suggestion.mention.here": "通知所有在此频道在线的人", "suggestion.mention.morechannels": "其他频道", + "suggestion.mention.nonmembers": "不在频道中", "suggestion.mention.special": "特别提及", + "suggestion.mention.users": "用户", "suggestion.search.direct": "私信", "suggestion.search.private": "私有频道", "suggestion.search.public": "公共频道", diff --git a/assets/base/i18n/zh-TW.json b/assets/base/i18n/zh-TW.json index 11130b53991..e5b5350c623 100644 --- a/assets/base/i18n/zh-TW.json +++ b/assets/base/i18n/zh-TW.json @@ -1,12 +1,12 @@ { - "about.date": "編譯日期:", - "about.enterpriseEditionLearn": "學習更多關於企業版: ", - "about.enterpriseEditionSt": "防火牆內側也可運行的溝通模式。", + "about.date": "組建日期:", + "about.enterpriseEditionLearn": "進一步瞭解企業版: ", + "about.enterpriseEditionSt": "完美藏身防火牆後的現代化通訊。", "about.enterpriseEditione1": "企業版", - "about.hash": "編譯 Hash:", - "about.hashee": "企業版編譯 Hash:", + "about.hash": "組建雜湊值:", + "about.hashee": "企業版組建雜湊值:", "about.teamEditionLearn": "加入 Mattermost 社群:", - "about.teamEditionSt": "您的團隊溝通皆在同處,隨時隨地皆可搜尋與存取。", + "about.teamEditionSt": "團隊通訊集中一處,隨時隨地搜尋與存取。", "about.teamEditiont0": "團隊版", "about.teamEditiont1": "企業版", "account.logout": "登出", @@ -15,973 +15,1174 @@ "account.your_profile": "你的個人檔案", "alert.channel_deleted.description": "{displayName} 頻道已封存。", "alert.channel_deleted.title": "已封存頻道", - "alert.push_proxy.button": "沒問題", - "alert.push_proxy_error.description": "由於服務設定的關係,無法在行動裝置應用程式中接收通知。請聯絡系統管理員取得資訊。", + "alert.push_proxy.button": "確定", + "alert.push_proxy_error.description": "由於此伺服器設定的關係,無法在行動裝置應用程式中接收通知。請聯絡系統管理員取得更多資訊。", "alert.push_proxy_error.title": "無法從伺服器接收通知", - "alert.push_proxy_unknown.description": "伺服器不明原因無法接收訊息推送。在您下次連線時將會再次嘗試。", + "alert.push_proxy_unknown.description": "伺服器不明原因無法接收推播通知。在您下次連線時將會再次嘗試。", "alert.push_proxy_unknown.title": "無法接收來自伺服器的通知", - "alert.removed_from_channel.description": "您已經移除 {displayName} 頻道。", - "alert.removed_from_channel.title": "已移除頻道", - "alert.removed_from_team.description": "您已經移除 {displayName} 團隊。", - "alert.removed_from_team.title": "已移除團隊", - "announcment_banner.dismiss": "關閉公告", - "announcment_banner.okay": "沒問題", - "api.channel.add_guest.added": "{addedUsername} 已被 {username} 加入到頻道為訪客。", - "api.channel.add_member.added": "{addedUsername} 已被 {username} 加入頻道。", - "api.channel.guest_join_channel.post_and_forget": "{username} 已加入到頻道為訪客。", + "alert.removed_from_channel.description": "有人將您從 {displayName} 頻道中移除。", + "alert.removed_from_channel.title": "已從頻道中移除", + "alert.removed_from_team.description": "有人將您從 {displayName} 團隊移除。", + "alert.removed_from_team.title": "已從團隊中移除", + "announcment_banner.dismiss": "撤下公告", + "announcment_banner.okay": "確定", + "api.channel.add_guest.added": "{username} 已將 {addedUsername} 以訪客身份加入頻道。", + "api.channel.add_member.added": "{username} 已將 {addedUsername} 加入頻道。", + "api.channel.guest_join_channel.post_and_forget": "{username} 已以訪客身份加入頻道。", "apps.error": "錯誤:{error}", "apps.error.command.field_missing": "遺漏必填欄位:`{fieldName}`。", - "apps.error.command.same_channel": "頻道重複的欄位 `{fieldName}`:`{option}`。", - "apps.error.command.same_option": "選項重複的欄位 `{fieldName}`:`{option}`。", - "apps.error.command.same_user": "使用者重複的欄位 `{fieldName}`:`{option}`。", - "apps.error.command.unknown_channel": "未知頻道的欄位 `{fieldName}`:`{option}`。", - "apps.error.command.unknown_option": "未知選項的欄位 `{fieldName}`:`{option}`。", - "apps.error.command.unknown_user": "未知使用者的欄位 `{fieldName}`:`{option}`。", - "apps.error.form.no_form": "`表單` 未定義。", - "apps.error.form.no_lookup": "`尋找` 未定義。", - "apps.error.form.no_source": "`來源` 未定義。", - "apps.error.form.no_submit": "`送出` 未定義", - "apps.error.form.refresh": "在擷取所選擇的欄位發生錯誤。請聯絡應用程式開發人員。詳細:{details}", - "apps.error.form.refresh_no_refresh": "執行重新整理在無法使用重新整理的欄位。", - "apps.error.form.submit.pretext": "在送出程式時發生錯誤。請聯絡應用程式開發人員。詳細:{details}", + "apps.error.command.same_channel": "`{fieldName}` 欄位的頻道重複:`{option}`。", + "apps.error.command.same_option": "`{fieldName}` 欄位的選項重複:`{option}`。", + "apps.error.command.same_user": "`{fieldName}` 欄位的使用者重複:`{option}`。", + "apps.error.command.unknown_channel": "`{fieldName}` 欄位的頻道未知:`{option}`。", + "apps.error.command.unknown_option": "`{fieldName}` 欄位的選項未知:`{option}`。", + "apps.error.command.unknown_user": "`{fieldName}` 欄位的使用者未知:`{option}`。", + "apps.error.form.no_form": "`form` 未定義。", + "apps.error.form.no_lookup": "`lookup` 未定義。", + "apps.error.form.no_source": "`source` 未定義。", + "apps.error.form.no_submit": "`submit` 未定義", + "apps.error.form.refresh": "在擷取所選的欄位時發生錯誤。請聯絡應用程式開發者。詳細資訊:{details}", + "apps.error.form.refresh_no_refresh": "您在無法使用重新整理的欄位執行重新整理。", + "apps.error.form.submit.pretext": "在送出程式時發生錯誤。請聯絡應用程式開發者。詳細資訊:{details}", "apps.error.lookup.error_preparing_request": "準備查詢請求發生錯誤:{errorMessage}", - "apps.error.malformed_binding": "這個連結不是正確的格式。請聯絡應用程式開發人員。", + "apps.error.malformed_binding": "此繫結格式不正確。請聯絡應用程式開發者。", "apps.error.parser": "解析錯誤:{error}", "apps.error.parser.empty_value": "不接受空值。", - "apps.error.parser.execute_non_leaf": "您必須選擇一個子命令。", - "apps.error.parser.missing_binding": "缺少命令綁定。", + "apps.error.parser.execute_non_leaf": "您必須選取子命令。", + "apps.error.parser.missing_binding": "缺少命令繫結。", "apps.error.parser.missing_field_value": "缺少欄位值。", - "apps.error.parser.missing_list_end": "預期的列表結束標記缺失。", - "apps.error.parser.missing_quote": "預期在輸入結束之前有匹配的雙引號。", - "apps.error.parser.missing_source": "表單既沒有提交(submit)也沒有來源(source)。", - "apps.error.parser.missing_submit": "綁定或表單中沒有提交(submit)呼叫。", - "apps.error.parser.missing_tick": "預期在輸入結束之前有匹配的反引號。", - "apps.error.parser.multiple_equal": "不允許多個 = 符號。", - "apps.error.parser.no_argument_pos_x": "無法識別參數。", - "apps.error.parser.no_bindings": "沒有命令綁定。", + "apps.error.parser.missing_list_end": "缺少列表結束標記。", + "apps.error.parser.missing_quote": "輸入結束之前應有相符的雙引號。", + "apps.error.parser.missing_source": "表單既沒有提交也沒有來源。", + "apps.error.parser.missing_submit": "繫結與表單中均無提交呼叫。", + "apps.error.parser.missing_tick": "輸入結束之前應有相符的單引號。", + "apps.error.parser.multiple_equal": "多個 `=` 記號不被允許。", + "apps.error.parser.no_argument_pos_x": "無法辨識引數。", + "apps.error.parser.no_bindings": "沒有命令繫結。", "apps.error.parser.no_form": "找不到表單。", - "apps.error.parser.no_match": "{command}:在此工作區中找不到相符的命令。", - "apps.error.parser.no_slash_start": "命令必須以斜線 / 開頭。", - "apps.error.parser.unexpected_character": "出現了意外字符。", - "apps.error.parser.unexpected_comma": "出現了意外逗號。", - "apps.error.parser.unexpected_error": "出現了意外錯誤。", - "apps.error.parser.unexpected_flag": "命令不接受標誌 {flagName}。", + "apps.error.parser.no_match": "`{command}`:在此工作區中找不到相符的命令。", + "apps.error.parser.no_slash_start": "命令必須以斜線 `/` 開頭。", + "apps.error.parser.unexpected_character": "出現了意外的字元。", + "apps.error.parser.unexpected_comma": "出現了意外的逗號。", + "apps.error.parser.unexpected_error": "發生了意外的錯誤。", + "apps.error.parser.unexpected_flag": "命令不接受 `{flagName}` 旗標。", "apps.error.parser.unexpected_squared_bracket": "出現了意外的列表開始。", - "apps.error.parser.unexpected_state": "無法到達:在 matchBinding 中出現了意外狀態:`{state}`。", - "apps.error.parser.unexpected_whitespace": "無法到達:出現了意外的空格。", - "apps.error.responses.form.no_form": "回應類型為 form,但在回應中未包含表單。", - "apps.error.responses.navigate.no_url": "回應類型為 `navigate`,但在回應中未包含 URL。", + "apps.error.parser.unexpected_state": "不可及:在 matchBinding 中出現了意外狀態:`{state}`。", + "apps.error.parser.unexpected_whitespace": "不可及:出現了意外的空格。", + "apps.error.responses.form.no_form": "回應類型為 `form`,但在回應中並未包含表單。", + "apps.error.responses.navigate.no_url": "回應類型為 `navigate`,但在回應中並未包含網址。", "apps.error.responses.unexpected_error": "收到了意外的錯誤。", - "apps.error.responses.unexpected_type": "", - "apps.error.responses.unknown_field_error": "", - "apps.error.responses.unknown_type": "", - "apps.error.unknown": "", - "apps.suggestion.dynamic.error": "", + "apps.error.responses.unexpected_type": "未預期的應用程式回應類型。回應類型:{type}", + "apps.error.responses.unknown_field_error": "收到未知欄位的錯誤。欄位名稱:`{field}`。錯誤:`{error}`。", + "apps.error.responses.unknown_type": "不支援的應用程式回應類型。回應類型:{type}。", + "apps.error.unknown": "發生了不明的錯誤。", + "apps.suggestion.dynamic.error": "動態選取錯誤", "apps.suggestion.errors.parser_error": "解析錯誤", - "apps.suggestion.no_dynamic": "", - "apps.suggestion.no_static": "", - "apps.suggestion.no_suggestion": "", - "archivedChannelMessage": "正在觀看**被封存的頻道**。不能發布新訊息。", + "apps.suggestion.no_dynamic": "動態建議沒有回傳資料", + "apps.suggestion.no_static": "沒有相符的選項。", + "apps.suggestion.no_suggestion": "沒有相符的建議。", + "archivedChannelMessage": "您檢視的是**被封存的頻道**。不能發布新訊息。", "autocomplete_selector.unknown_channel": "未知頻道", "browse_channels.archivedChannels": "封存頻道", "browse_channels.dropdownTitle": "顯示", "browse_channels.noMore": "沒有更多頻道可以加入", "browse_channels.publicChannels": "公開頻道", - "browse_channels.sharedChannels": "", - "browse_channels.showArchivedChannels": "", - "browse_channels.showPublicChannels": "", - "browse_channels.showSharedChannels": "", + "browse_channels.sharedChannels": "共享頻道", + "browse_channels.showArchivedChannels": "顯示:封存的頻道", + "browse_channels.showPublicChannels": "顯示:公開頻道", + "browse_channels.showSharedChannels": "顯示:共享頻道", "browse_channels.title": "瀏覽頻道", "camera_type.photo.option": "拍攝照片", - "camera_type.video.option": "錄影片", + "camera_type.video.option": "錄製影片", "center_panel.archived.closeChannel": "關閉頻道", - "channel_add_members.add_members.button": "新增會員", - "channel_files.empty.title": "還沒有文件", - "channel_header.directchannel.you": "", - "channel_header.info": "查看訊息", - "channel_header.member_count": "", - "channel_info.add_members": "加入會員", + "channel_add_members.add_members.button": "新增成員", + "channel_bookmark.add.detail_title": "標題", + "channel_bookmark.add.emoji": "新增表情符號", + "channel_bookmark.add.failed_title": "增加書籤發生錯誤", + "channel_bookmark.add.file_cancel": "取消", + "channel_bookmark.add.file_title": "附件", + "channel_bookmark.add.file_upload_error": "上傳檔案時發生錯誤,請重新再試一次。", + "channel_bookmark.add.file_uploading": "上傳中... ({progress}%)", + "channel_bookmark.add_edit.failed_desc": "詳情:{error}", + "channel_bookmark.copy_option": "複製連結", + "channel_bookmark.delete.confirm": "您確定要刪除書籤 {displayName} 嗎?", + "channel_bookmark.delete.confirm_title": "刪除書籤", + "channel_bookmark.delete.failed_detail": "詳細資料:{error}", + "channel_bookmark.delete.failed_title": "刪除書籤時發生錯誤", + "channel_bookmark.delete.yes": "是", + "channel_bookmark.delete_option": "刪除", + "channel_bookmark.edit.failed_title": "編輯書籤時發生錯誤", + "channel_bookmark.edit.save_button": "儲存", + "channel_bookmark.edit_option": "編輯", + "channel_bookmark.share_option": "分享", + "channel_bookmark_add.link": "連結", + "channel_bookmark_add.link.input.description": "新增指向任何訊息、檔案的連結,或任何外部的連結", + "channel_bookmark_add.link.invalid": "請輸入有效的連結", + "channel_files.empty.paragraph": "在這個頻道張貼的檔案會顯示於此處。", + "channel_files.empty.title": "還沒有檔案", + "channel_files.noFiles.paragraph": "此頻道不包含任何符合篩選條件的檔案", + "channel_files.noFiles.title": "找不到檔案", + "channel_header.directchannel.you": "{displayName}(您)", + "channel_header.info": "檢視資訊", + "channel_header.member_count": "{count, plural, one {# 位成員} other {# 位成員}}", + "channel_info.add_bookmark": "新增書籤", + "channel_info.add_bookmark.file": "附加檔案", + "channel_info.add_bookmark.link": "新增連結", + "channel_info.add_bookmark.max_reached": "這頻道的書籤數量已經達到上限。", + "channel_info.add_members": "新增成員", "channel_info.alertNo": "否", "channel_info.alertYes": "是", - "channel_info.alert_retry": "再試一次", - "channel_info.archive": "檔案頻道", - "channel_info.archive_description.can_view_archived": "", - "channel_info.archive_description.cannot_view_archived": "", - "channel_info.archive_failed": "", - "channel_info.archive_title": "", + "channel_info.alert_retry": "重試", + "channel_info.archive": "封存頻道", + "channel_info.archive_description.can_view_archived": "將會從團隊封存頻道。頻道成員依然可存取其內容。\n\n確定要封存 {term}{name} 嗎?", + "channel_info.archive_description.cannot_view_archived": "將會從團隊封存頻道並從使用者介面移除。如果需要,可以解除頻道的封存狀態。\n\n確定要封存 {term}{name} 嗎?", + "channel_info.archive_failed": "嘗試封存頻道 {displayName} 時發生錯誤", + "channel_info.archive_title": "封存{term}", + "channel_info.channel_auto_follow_threads": "追蹤此頻道所有討論串", + "channel_info.channel_auto_follow_threads_failed": "嘗試自動追蹤頻道{displayName}中的所有討論串時發生錯誤", "channel_info.channel_files": "檔案", - "channel_info.close": "", - "channel_info.close_dm": "", - "channel_info.close_dm_channel": "", - "channel_info.close_gm": "", - "channel_info.close_gm_channel": "", - "channel_info.convert_failed": "", - "channel_info.convert_private": "", - "channel_info.convert_private_description": "", - "channel_info.convert_private_success": "", - "channel_info.convert_private_title": "", - "channel_info.copied": "複製", + "channel_info.close": "關閉", + "channel_info.close_dm": "關閉私人訊息", + "channel_info.close_dm_channel": "確定要關閉此私人訊息?這將會從主畫面將其移除,但您隨時可再次開啟。", + "channel_info.close_gm": "關閉群組訊息", + "channel_info.close_gm_channel": "確定要關閉此群組訊息嗎?這將會從您的主畫面將其移除,但您可以隨時再次開啟。", + "channel_info.convert_failed": "我們無法將 {displayName} 轉換為私人頻道。", + "channel_info.convert_gm_to_channel": "轉換為私人頻道", + "channel_info.convert_gm_to_channel.button_text": "轉換為私人頻道", + "channel_info.convert_gm_to_channel.button_text_converting": "正在轉換…", + "channel_info.convert_gm_to_channel.conversion_error": "發生錯誤。無法將群組訊息轉換為私人頻道。", + "channel_info.convert_gm_to_channel.loading.footer": "正在取得詳細資料…", + "channel_info.convert_gm_to_channel.screen_title": "轉換為私人頻道", + "channel_info.convert_gm_to_channel.team_selector_list.title": "選擇團隊", + "channel_info.convert_gm_to_channel.warning.body.yourself": "您自己", + "channel_info.convert_gm_to_channel.warning.bodyXXXX": "您即將要把 {memberNames} 個人的群組訊息轉換成頻道。此動作無法還原。", + "channel_info.convert_gm_to_channel.warning.header": "任何頻道成員都將能看到交談歷史紀錄", + "channel_info.convert_gm_to_channel.warning.no_teams.body": "群組訊息無法轉換成頻道,因為成員並非屬於同個團隊。將所有成員加入同一個團隊以將此群組訊息轉為頻道。", + "channel_info.convert_gm_to_channel.warning.no_teams.header": "因爲群組成員屬於不同團隊,所以無法轉換為頻道", + "channel_info.convert_private": "轉換為私人頻道", + "channel_info.convert_private_description": "當您將 {displayName} 轉換為私人頻道時,歷史紀錄及成員資格將保留。知道連結的人仍能存取公開分享的檔案。私人頻道的成員資格僅能透過邀請取得。\n\n此變更為永久且不可還原。\n\n確定要將 {displayName} 轉為私人頻道嗎?", + "channel_info.convert_private_success": "{displayName} 現在起為私人頻道。", + "channel_info.convert_private_title": "要將 {displayName} 轉換為私人頻道嗎?", + "channel_info.copied": "已複製", "channel_info.copy_link": "複製連結", - "channel_info.custom_status": "", - "channel_info.edit_header": "", - "channel_info.error_close": "", - "channel_info.favorite": "", - "channel_info.favorited": "", + "channel_info.copy_purpose_text": "複製目的文字", + "channel_info.custom_status": "自訂狀態:", + "channel_info.edit_header": "編輯標題", + "channel_info.error_close": "關閉", + "channel_info.favorite": "加到最愛", + "channel_info.favorited": "已加到最愛", "channel_info.header": "標題:", - "channel_info.ignore_mentions": "", - "channel_info.leave": "", - "channel_info.leave_channel": "", - "channel_info.leave_private_channel": "", - "channel_info.leave_public_channel": "", - "channel_info.local_time": "", - "channel_info.members": "", - "channel_info.mention": "", - "channel_info.mobile_notifications": "", - "channel_info.muted": "", - "channel_info.nickname": "", - "channel_info.notification.all": "", - "channel_info.notification.default": "", - "channel_info.notification.mention": "", - "channel_info.notification.none": "", - "channel_info.pinned_messages": "", - "channel_info.position": "", - "channel_info.private_channel": "", - "channel_info.public_channel": "", - "channel_info.send_a_mesasge": "", - "channel_info.send_mesasge": "", - "channel_info.set_header": "", - "channel_info.unarchive": "", - "channel_info.unarchive_description": "", - "channel_info.unarchive_failed": "", - "channel_info.unarchive_title": "", - "channel_intro.createdBy": "", - "channel_intro.createdOn": "", - "channel_list.channels_category": "", - "channel_list.dms_category": "", - "channel_list.favorites_category": "", - "channel_list.find_channels": "", + "channel_info.ignore_mentions": "忽略 @channel、@here、@all", + "channel_info.leave": "離開", + "channel_info.leave_channel": "離開頻道", + "channel_info.leave_private_channel": "確定要離開私人頻道 {displayName} 嗎?除非重獲邀請,否則您將無法重新加入該頻道。", + "channel_info.leave_public_channel": "確定要離開公開頻道 {displayName} 嗎?您隨時可重新加入。", + "channel_info.local_time": "當地時間", + "channel_info.members": "成員", + "channel_info.mention": "提及", + "channel_info.mobile_notifications": "行動裝置通知", + "channel_info.muted": "靜音", + "channel_info.nickname": "暱稱", + "channel_info.notification.all": "全部", + "channel_info.notification.default": "預設", + "channel_info.notification.mention": "提及", + "channel_info.notification.none": "永不", + "channel_info.pinned_messages": "釘選的訊息", + "channel_info.position": "職位", + "channel_info.private_channel": "私人頻道", + "channel_info.public_channel": "公開頻道", + "channel_info.send_a_mesasge": "傳送訊息", + "channel_info.send_mesasge": "傳送訊息", + "channel_info.set_header": "設定標題", + "channel_info.unarchive": "取消封存頻道", + "channel_info.unarchive_description": "確定要取消封存 {term} {name} 嗎?", + "channel_info.unarchive_failed": "嘗試取消封存頻道 {displayName} 時發生錯誤", + "channel_info.unarchive_title": "取消封存 {term}", + "channel_into.convert_gm_to_channel.team_selector.label": "團隊", + "channel_into.convert_gm_to_channel.team_selector.placeholder": "選取團隊", + "channel_intro.createdBy": "由 {user} 建立於 {date}", + "channel_intro.createdOn": "建立於 {date}", + "channel_list.channels_category": "頻道", + "channel_list.dms_category": "私人訊息", + "channel_list.favorites_category": "我的最愛", + "channel_list.find_channels": "尋找頻道…", "channel_loader.someone": "某人", - "channel_modal.descriptionHelp": "說明此頻道該如何被使用。", + "channel_modal.descriptionHelp": "說明此頻道的用途。", "channel_modal.header": "標題", - "channel_modal.headerEx": "", - "channel_modal.headerHelp": "", - "channel_modal.makePrivate.description": "", - "channel_modal.makePrivate.label": "", - "channel_modal.name": "名字", - "channel_modal.nameEx": "", - "channel_modal.optional": "(非必須)", + "channel_modal.headerEx": "使用 Markdown 語法來格式化標題文字", + "channel_modal.headerHelp": "指定要出現在頻道名稱旁的頻道標題文字。例如:透過輸入連結文字[連結名稱](http://example.com)來加上常用的連結。", + "channel_modal.makePrivate.description": "當頻道設為私人模式時,僅有受邀的團隊成員能存取並加入該頻道", + "channel_modal.makePrivate.label": "設為私人", + "channel_modal.name": "名稱", + "channel_modal.nameEx": "臭蟲、行銷", + "channel_modal.optional": "(非必要)", "channel_modal.purpose": "用途", - "channel_modal.purposeEx": "", - "combined_system_message.added_to_channel.many_expanded": "{users}與{lastUser}已由{actor}**加入至此頻道**。", - "combined_system_message.added_to_channel.one": "{firstUser}已由{actor}**加入至此頻道**。", - "combined_system_message.added_to_channel.one_you": "您已由{actor}**加入至此頻道**。", - "combined_system_message.added_to_channel.two": "{firstUser}與{secondUser}已由{actor}**加入至此頻道**。", - "combined_system_message.added_to_team.many_expanded": "{users}與{lastUser}已由{actor}**加入至此團隊**。", - "combined_system_message.added_to_team.one": "{firstUser}已由{actor}**加入至此團隊**。", - "combined_system_message.added_to_team.one_you": "您已由{actor}**加入至此團隊**。", - "combined_system_message.added_to_team.two": "{firstUser}與{secondUser}已由{actor}**加入至此團隊**。", - "combined_system_message.joined_channel.many_expanded": "{users}與{lastUser}已**加入至此頻道**。", - "combined_system_message.joined_channel.one": "{firstUser}已**加入至此頻道**。", - "combined_system_message.joined_channel.one_you": "你**已加入頻道**。", - "combined_system_message.joined_channel.two": "{firstUser}與{secondUser}已**加入至此頻道**。", - "combined_system_message.joined_team.many_expanded": "{users}與{lastUser}已**加入至此團隊**。", - "combined_system_message.joined_team.one": "{firstUser}已**加入至此團隊**。", - "combined_system_message.joined_team.one_you": "你**已加入團隊**。", - "combined_system_message.joined_team.two": "{firstUser}與{secondUser}已**加入至此團隊**。", - "combined_system_message.left_channel.many_expanded": "{users}與{lastUser}已**離開此頻道**。", - "combined_system_message.left_channel.one": "{firstUser}已**離開此頻道**。", - "combined_system_message.left_channel.one_you": "你**已離開頻道**。", - "combined_system_message.left_channel.two": "{firstUser}與{secondUser}已**離開此頻道**。", - "combined_system_message.left_team.many_expanded": "{users}與{lastUser}已**離開此團隊**。", - "combined_system_message.left_team.one": "{firstUser}已**離開此團隊**。", - "combined_system_message.left_team.one_you": "你**已離開團隊**。", - "combined_system_message.left_team.two": "{firstUser}與{secondUser}已**離開此團隊**。", - "combined_system_message.removed_from_channel.many_expanded": "{users}與{lastUser}已**被移出此頻道**。", - "combined_system_message.removed_from_channel.one": "{firstUser}已**被移出此頻道**。", + "channel_modal.purposeEx": "用來記錄臭蟲及改善方案的頻道", + "channel_notification_preferences.default": "(預設)", + "channel_notification_preferences.muted_content": "您可以變更通知設定,但將不會收到通知,直到頻道解除靜音。", + "channel_notification_preferences.muted_title": "此頻道已被靜音", + "channel_notification_preferences.notification.all": "所有新訊息", + "channel_notification_preferences.notification.mention": "僅提及", + "channel_notification_preferences.notification.none": "無", + "channel_notification_preferences.notification.thread_replies": "通知我在此頻道中的討論串回覆", + "channel_notification_preferences.notify_about": "通知我關於…", + "channel_notification_preferences.reset_default": "重設為預設值", + "channel_notification_preferences.thread_replies": "討論串回覆", + "channel_notification_preferences.unmute_content": "取消靜音頻道", + "combined_system_message.added_to_channel.many_expanded": "{users} 與 {lastUser} 已由 {actor} **加入至此頻道**。", + "combined_system_message.added_to_channel.one": "{firstUser} 已由 {actor} **加入至此頻道**。", + "combined_system_message.added_to_channel.one_you": "您已由 {actor} **加入至此頻道**。", + "combined_system_message.added_to_channel.two": "{firstUser} 與 {secondUser} 已由 {actor} **加入至此頻道**。", + "combined_system_message.added_to_team.many_expanded": "{users} 與 {lastUser} 已由 {actor} **加入至此團隊**。", + "combined_system_message.added_to_team.one": "{firstUser} 已由 {actor} **加入至此團隊**。", + "combined_system_message.added_to_team.one_you": "您已由 {actor} **加入至此團隊**。", + "combined_system_message.added_to_team.two": "{firstUser} 與 {secondUser} 已由 {actor} **加入至此團隊**。", + "combined_system_message.joined_channel.many_expanded": "{users} 與 {lastUser} 已**加入至此頻道**。", + "combined_system_message.joined_channel.one": "{firstUser} 已**加入至此頻道**。", + "combined_system_message.joined_channel.one_you": "您**已加入頻道**。", + "combined_system_message.joined_channel.two": "{firstUser} 與 {secondUser} 已**加入此頻道**。", + "combined_system_message.joined_team.many_expanded": "{users} 與 {lastUser} 已**加入此團隊**。", + "combined_system_message.joined_team.one": "{firstUser} 已**加入此團隊**。", + "combined_system_message.joined_team.one_you": "您**已加入此團隊**。", + "combined_system_message.joined_team.two": "{firstUser} 與 {secondUser} 已**加入此團隊**。", + "combined_system_message.left_channel.many_expanded": "{users} 與 {lastUser} 已**離開此頻道**。", + "combined_system_message.left_channel.one": "{firstUser} 已**離開此頻道**。", + "combined_system_message.left_channel.one_you": "您**已離開此頻道**。", + "combined_system_message.left_channel.two": "{firstUser} 與 {secondUser} 已**離開此頻道**。", + "combined_system_message.left_team.many_expanded": "{users} 與 {lastUser} 已**離開此團隊**。", + "combined_system_message.left_team.one": "{firstUser} 已**離開此團隊**。", + "combined_system_message.left_team.one_you": "您**已離開此團隊**。", + "combined_system_message.left_team.two": "{firstUser} 與 {secondUser} 已**離開此團隊**。", + "combined_system_message.removed_from_channel.many_expanded": "{users} 與 {lastUser} 已**被移出此頻道**。", + "combined_system_message.removed_from_channel.one": "{firstUser} 已**被移出此頻道**。", "combined_system_message.removed_from_channel.one_you": "您已**被移出此頻道**。", - "combined_system_message.removed_from_channel.two": "{firstUser}與{secondUser}已**被移出此頻道**。", - "combined_system_message.removed_from_team.many_expanded": "{users}與{lastUser}已**被移出此團隊**。", - "combined_system_message.removed_from_team.one": "{firstUser}已**被移出此團隊**。", + "combined_system_message.removed_from_channel.two": "{firstUser} 與 {secondUser} 已**被移出此頻道**。", + "combined_system_message.removed_from_team.many_expanded": "{users} 與 {lastUser} 已**被移出此團隊**。", + "combined_system_message.removed_from_team.one": "{firstUser} 已**被移出此團隊**。", "combined_system_message.removed_from_team.one_you": "您已**被移出此團隊**。", - "combined_system_message.removed_from_team.two": "{firstUser}與{secondUser}已**被移出此團隊**。", + "combined_system_message.removed_from_team.two": "{firstUser} 與 {secondUser} 已**被移出此團隊**。", "combined_system_message.you": "您", - "connection_banner.connected": "", - "connection_banner.connecting": "", - "connection_banner.not_connected": "", - "connection_banner.not_reachable": "", - "create_direct_message.title": "", - "create_post.deactivated": "正以被停用的使用者觀看被封存的頻道。", - "create_post.thread_reply": "", + "connection_banner.connected": "連線已恢復", + "connection_banner.connecting": "正在連線…", + "connection_banner.not_connected": "無網際網路連線", + "connection_banner.not_reachable": "伺服器無法存取", + "create_direct_message.title": "建立私人訊息", + "create_post.deactivated": "正以被停權的使用者檢視已封存的頻道。", + "create_post.thread_reply": "回覆此討論串…", "create_post.write": "寫給 {channelDisplayName}", - "custom_status.expiry.at": "", - "custom_status.expiry.until": "", - "custom_status.expiry_dropdown.custom": "", - "custom_status.expiry_dropdown.date_and_time": "", - "custom_status.expiry_dropdown.dont_clear": "", - "custom_status.expiry_dropdown.four_hours": "", - "custom_status.expiry_dropdown.one_hour": "", - "custom_status.expiry_dropdown.thirty_minutes": "", - "custom_status.expiry_dropdown.this_week": "", - "custom_status.expiry_dropdown.today": "", - "custom_status.expiry_time.today": "", - "custom_status.expiry_time.tomorrow": "", - "custom_status.failure_message": "", - "custom_status.set_status": "", - "custom_status.suggestions.in_a_meeting": "", - "custom_status.suggestions.on_a_vacation": "", - "custom_status.suggestions.out_for_lunch": "", - "custom_status.suggestions.out_sick": "", - "custom_status.suggestions.recent_title": "", - "custom_status.suggestions.title": "", - "custom_status.suggestions.working_from_home": "", + "custom_status.expiry.at": "於", + "custom_status.expiry.until": "直到", + "custom_status.expiry_dropdown.custom": "自訂", + "custom_status.expiry_dropdown.date_and_time": "日期與時間", + "custom_status.expiry_dropdown.dont_clear": "不要清除", + "custom_status.expiry_dropdown.four_hours": "4 小時後", + "custom_status.expiry_dropdown.one_hour": "1 小時後", + "custom_status.expiry_dropdown.thirty_minutes": "30 分鐘後", + "custom_status.expiry_dropdown.this_week": "本週", + "custom_status.expiry_dropdown.today": "今天", + "custom_status.expiry_time.today": "今天", + "custom_status.expiry_time.tomorrow": "明天", + "custom_status.failure_message": "無法更新狀態。請重試", + "custom_status.set_status": "設定自訂狀態", + "custom_status.suggestions.in_a_meeting": "會議中", + "custom_status.suggestions.on_a_vacation": "度假中", + "custom_status.suggestions.out_for_lunch": "出去吃午餐", + "custom_status.suggestions.out_sick": "病假", + "custom_status.suggestions.recent_title": "近期使用", + "custom_status.suggestions.title": "建議", + "custom_status.suggestions.working_from_home": "在家上班", "date_separator.today": "今天", "date_separator.yesterday": "昨天", - "default_skin_tone": "", - "display_settings.clock.military": "", - "display_settings.clock.standard": "", - "display_settings.clockDisplay": "", - "display_settings.crt": "", - "display_settings.crt.off": "", - "display_settings.crt.on": "", - "display_settings.theme": "", - "display_settings.timezone": "", - "display_settings.tz.auto": "", - "display_settings.tz.manual": "", - "download.error": "", - "edit_post.editPost": "修改訊息...", + "default_skin_tone": "預設膚色色調", + "display_settings.clock.military": "24 小時制", + "display_settings.clock.standard": "12 小時制", + "display_settings.clockDisplay": "顯示時間", + "display_settings.crt": "收合回覆討論串", + "display_settings.crt.off": "關閉", + "display_settings.crt.on": "開啟", + "display_settings.theme": "佈景主題", + "display_settings.timezone": "時區", + "display_settings.tz.auto": "自動", + "display_settings.tz.manual": "手動選擇", + "download.error": "無法下載檔案。請稍後再試", + "edit_post.editPost": "編輯訊息…", "edit_post.save": "儲存", - "edit_server.description": "", - "edit_server.display_help": "", - "edit_server.save": "", - "edit_server.saving": "", - "edit_server.title": "", - "emoji_picker.activities": "", - "emoji_picker.animals-nature": "", - "emoji_picker.custom": "", - "emoji_picker.flags": "", - "emoji_picker.food-drink": "", - "emoji_picker.objects": "", - "emoji_picker.people-body": "", - "emoji_picker.recent": "", - "emoji_picker.searchResults": "", - "emoji_picker.smileys-emotion": "", - "emoji_picker.symbols": "", - "emoji_picker.travel-places": "", - "emoji_skin.dark_skin_tone": "", - "emoji_skin.default": "", - "emoji_skin.light_skin_tone": "", - "emoji_skin.medium_dark_skin_tone": "", - "emoji_skin.medium_light_skin_tone": "", - "emoji_skin.medium_skin_tone": "", - "extension.no_memberships.description": "", - "extension.no_memberships.title": "", - "extension.no_servers.description": "", - "extension.no_servers.title": "", - "file_upload.fileAbove": "無法上傳超過{max}MB 的檔案", - "find_channels.directory": "", - "find_channels.new_channel": "", - "find_channels.open_dm": "", - "find_channels.title": "", - "friendly_date.daysAgo": "", - "friendly_date.hoursAgo": "", - "friendly_date.minsAgo": "", - "friendly_date.monthsAgo": "", - "friendly_date.now": "", - "friendly_date.yearsAgo": "", - "friendly_date.yesterday": "", - "gallery.copy_link.failed": "", - "gallery.downloading": "", - "gallery.footer.channel_name": "", - "gallery.image_saved": "", - "gallery.open_file": "", - "gallery.opening": "", - "gallery.preparing": "", - "gallery.save_failed": "", - "gallery.unsupported": "", - "gallery.video_saved": "", - "general_settings.about": "", - "general_settings.advanced_settings": "", - "general_settings.display": "", - "general_settings.help": "", - "general_settings.notifications": "", - "general_settings.report_problem": "", + "edit_server.description": "為此伺服器指定顯示名稱", + "edit_server.display_help": "伺服器:{url}", + "edit_server.save": "儲存", + "edit_server.saving": "儲存中", + "edit_server.title": "編輯伺服器名稱", + "emoji_picker.activities": "活動", + "emoji_picker.animals-nature": "動物及自然", + "emoji_picker.custom": "自訂", + "emoji_picker.flags": "旗幟", + "emoji_picker.food-drink": "食物及飲料", + "emoji_picker.objects": "物件", + "emoji_picker.people-body": "人及身體", + "emoji_picker.recent": "最近曾使用", + "emoji_picker.searchResults": "搜尋結果", + "emoji_picker.smileys-emotion": "微笑及表情", + "emoji_picker.symbols": "符號", + "emoji_picker.travel-places": "旅遊及場所", + "emoji_skin.dark_skin_tone": "深色膚色色調", + "emoji_skin.default": "預設膚色色調", + "emoji_skin.light_skin_tone": "淺色膚色色調", + "emoji_skin.medium_dark_skin_tone": "中等深色膚色色調", + "emoji_skin.medium_light_skin_tone": "中等淺色膚色色調", + "emoji_skin.medium_skin_tone": "中等膚色色調", + "extension.no_memberships.description": "您必須先成為 Mattermost 伺服器上的團隊成員,才能分享內容。", + "extension.no_memberships.title": "尚未成為任何團隊的成員", + "extension.no_servers.description": "您必須先登入 Mattermost 伺服器,才能分享內容。", + "extension.no_servers.title": "尚未連線至任何伺服器", + "file_upload.fileAbove": "無法上傳超過 {max} 的檔案", + "find_channels.directory": "目錄", + "find_channels.new_channel": "新頻道", + "find_channels.open_dm": "開啟私人訊息", + "find_channels.title": "尋找頻道", + "friendly_date.daysAgo": "{count} {count, plural, one {天} other {天}}前", + "friendly_date.hoursAgo": "{count} {count, plural, one {小時} other {小時}}前", + "friendly_date.minsAgo": "{count} {count, plural, one {分鐘} other {分鐘}}前", + "friendly_date.monthsAgo": "{count} {count, plural, one {個月} other {個月}}前", + "friendly_date.now": "現在", + "friendly_date.yearsAgo": "{count} {count, plural, one {年} other {年}}前", + "friendly_date.yesterday": "昨天", + "gallery.copy_link.failed": "無法複製連結至剪貼簿", + "gallery.downloading": "正在下載…", + "gallery.footer.channel_name": "分享於 {channelName}", + "gallery.image_saved": "已儲存圖片", + "gallery.open_file": "開啟檔案", + "gallery.opening": "正在開啟…", + "gallery.preparing": "正在準備…", + "gallery.save_failed": "無法儲存檔案", + "gallery.unsupported": "預覽功能不支援此檔案類型。請嘗試下載或分享至其他應用程式以開啟。", + "gallery.video_saved": "已儲存影片", + "general_settings.about": "關於 {appTitle}", + "general_settings.advanced_settings": "進階設定", + "general_settings.display": "顯示", + "general_settings.help": "說明", + "general_settings.notifications": "通知", + "general_settings.report_problem": "回報問題", + "generic.back": "返回", "get_post_link_modal.title": "複製連結", - "global_threads.allThreads": "", - "global_threads.emptyThreads.message": "", - "global_threads.emptyThreads.title": "", - "global_threads.emptyUnreads.message": "", - "global_threads.emptyUnreads.title": "", - "global_threads.markAllRead.cancel": "", - "global_threads.markAllRead.markRead": "", - "global_threads.markAllRead.message": "", - "global_threads.markAllRead.title": "", - "global_threads.options.mark_as_read": "", - "global_threads.options.open_in_channel": "", - "global_threads.options.title": "", - "global_threads.unreads": "", - "home.header.plus_menu": "", - "integration_selector.multiselect.submit": "", - "interactive_dialog.submit": "", - "intro.channel_info": "", - "intro.created_by": "", - "intro.direct_message": "", - "intro.private_channel": "", - "intro.public_channel": "", - "intro.townsquare": "", - "intro.welcome": "", - "intro.welcome.private": "", - "intro.welcome.public": "", - "invite.members.already_member": "", - "invite.members.user_is_guest": "", - "invite.search.email_invite": "", - "invite.search.no_results": "", - "invite.searchPlaceholder": "", - "invite.sendInvitationsTo": "", - "invite.send_error": "", - "invite.send_invite": "", - "invite.shareLink": "", - "invite.summary.done": "", - "invite.summary.email_invite": "", - "invite.summary.error": "", - "invite.summary.member_invite": "", - "invite.summary.not_sent": "", - "invite.summary.report.notSent": "", - "invite.summary.report.sent": "", - "invite.summary.sent": "", - "invite.summary.smtp_failure": "", - "invite.summary.some_not_sent": "", - "invite.summary.try_again": "", - "invite.title": "", - "invite.title.summary": "", - "invite_people_to_team.message": "", - "invite_people_to_team.title": "", - "join_team.error.group_error": "", - "join_team.error.message": "", - "join_team.error.title": "", - "last_users_message.added_to_channel.type": "已由{actor}**加入至此頻道**。", - "last_users_message.added_to_team.type": "已由{actor}**加入至此團隊**。", - "last_users_message.first": "{firstUser}與", + "global_threads.allThreads": "您的所有討論串", + "global_threads.emptyThreads.message": "您參與或被提及的討論串,將與其他您追蹤的討論串一同顯示於此處。", + "global_threads.emptyThreads.title": "尚無追蹤的討論串", + "global_threads.emptyUnreads.message": "看樣子您已掌握最新情況。", + "global_threads.emptyUnreads.title": "沒有未讀的討論串", + "global_threads.markAllRead.cancel": "取消", + "global_threads.markAllRead.markRead": "標示為已讀", + "global_threads.markAllRead.message": "這將會對此處顯示的所有您的討論串清除未讀狀態", + "global_threads.markAllRead.title": "確定是否要將所有討論串標示為已讀?", + "global_threads.options.mark_as_read": "標示為已讀", + "global_threads.options.open_in_channel": "在頻道中開啟", + "global_threads.options.title": "討論串動作", + "global_threads.unreads": "未讀", + "home.header.plus_menu": "選項", + "integration_selector.multiselect.submit": "完成", + "interactive_dialog.submit": "送出", + "intro.add_members": "新增成員", + "intro.channel_info": "資訊", + "intro.created_by": "由 {creator} 建立於 {date}。", + "intro.direct_message": "此為您與 {teammate} 的交談起始處。此處的訊息與分享的檔案不會對其他人顯示。", + "intro.group_message.after_gm_as_dm": "此為您與此群組的交談起始處。此處的訊息與分享的檔案不會對任何群組外的人顯示。", + "intro.group_message.all": "您將收到關於此群組訊息中的所有活動的通知。", + "intro.group_message.common": "此為您在此群組的對話起始處。", + "intro.group_message.mention": "您已選擇在此群組訊息中只在被提及時接收通知。", + "intro.group_message.muted": "此群組訊息目前被設為靜音,所以您不會收到通知。", + "intro.group_message.none": "您已選擇在此群組訊息中永不接收通知。", + "intro.private_channel": "私人頻道", + "intro.public_channel": "公開頻道", + "intro.townsquare": "歡迎來到 {name}。所有人加入團隊時會自動成為此頻道的成員。", + "intro.welcome": "歡迎來到 {displayName} 頻道。", + "intro.welcome.private": "僅有受邀的成員能檢視張貼於此私人頻道的訊息。", + "intro.welcome.public": "將更多團隊成員加入此頻道,或在下方開始對話。", + "invite.members.already_member": "此人已經是團隊成員", + "invite.members.user_is_guest": "聯絡管理員以讓此訪客成為正式成員", + "invite.search.email_invite": "邀請", + "invite.search.no_results": "沒有相符的結果", + "invite.searchPlaceholder": "輸入名稱或電子郵件地址…", + "invite.sendInvitationsTo": "寄送邀請函給…", + "invite.send_error": "嘗試發送邀請時發生錯誤。請檢查網路連線並稍後再試。", + "invite.send_invite": "傳送", + "invite.shareLink": "分享連結", + "invite.summary.back": "返回", + "invite.summary.done": "完成", + "invite.summary.email_invite": "已寄出邀請電子郵件", + "invite.summary.error": "寄送{invitationsCount, plural, one {邀請函} other {邀請函}}未成功", + "invite.summary.member_invite": "邀請為{teamDisplayName}的成員", + "invite.summary.not_sent": "未寄出{notSentCount, plural, one {邀請函} other {邀請函}}", + "invite.summary.report.notSent": "{count}封{count, plural, one {邀請函} other {邀請函}}未寄出", + "invite.summary.report.sent": "已成功寄送 {count} 份 {count, plural, one {邀請函} other {邀請函}}", + "invite.summary.sent": "您的{sentCount, plural, one {份邀請} other {份邀請}}已送出", + "invite.summary.smtp_failure": "系統主控台中尚未設定 SMTP", + "invite.summary.some_not_sent": "{notSentCount, plural, one {一封邀請函} other {一些邀請函}}未寄出", + "invite.summary.try_again": "重試", + "invite.title": "邀請", + "invite.title.summary": "邀請概要", + "invite_people_to_team.message": "透過此連結在 Mattermost 上與我們協作及溝通。", + "invite_people_to_team.title": "加入團隊 {team}", + "join_team.error.group_error": "您必須成為關聯的群組成員才能加入此團隊。", + "join_team.error.message": "加入團隊時發生錯誤", + "join_team.error.title": "加入團隊時發生錯誤", + "last_users_message.added_to_channel.type": "已由 {actor} **加入至此頻道**。", + "last_users_message.added_to_team.type": "已由 {actor} **加入至此團隊**。", + "last_users_message.first": "{firstUser} 與 ", "last_users_message.joined_channel.type": "**加入此頻道**。", "last_users_message.joined_team.type": "**加入此團隊**。", "last_users_message.left_channel.type": "**離開此頻道**。", "last_users_message.left_team.type": "**離開了團隊**。", - "last_users_message.others": "其他 {numOthers} 位", + "last_users_message.others": "其他 {numOthers} 位 ", "last_users_message.removed_from_channel.type": "已**被移出此頻道**。", "last_users_message.removed_from_team.type": "已**被移出此團隊**。", - "load_categories_error.message": "", - "load_categories_error.title": "", - "load_channels_error.message": "", - "load_channels_error.title": "", - "load_teams_error.message": "", - "load_teams_error.title": "", + "load_categories_error.message": "載入此伺服器上的內容時發生問題。", + "load_categories_error.title": "無法載入 {serverName} 上的分類", + "load_channels_error.message": "載入此團隊的內容時發生問題。", + "load_channels_error.title": "無法載入 {teamDisplayName}", + "load_teams_error.message": "載入此伺服器上的內容時發生問題。", + "load_teams_error.title": "無法載入 {serverName}", "login.email": "電子郵件", - "login.forgot": "", - "login.invalid_credentials": "", + "login.forgot": "忘記密碼?", + "login.invalid_credentials": "電子郵件地址或密碼不正確", "login.ldapUsername": "AD/LDAP 使用者名稱", "login.or": "或", "login.password": "密碼", - "login.signIn": "", - "login.signingIn": "", + "login.signIn": "登入", + "login.signingIn": "正在登入", "login.username": "使用者名稱", - "login_mfa.enterToken": "", - "login_mfa.token": "", - "login_mfa.tokenReq": "請輸入多重要素驗證 Token", - "markdown.latex.error": "", - "mentions.empty.paragraph": "", - "mentions.empty.title": "", - "mobile.about.appVersion": "應用程式版本:{version} (Build {number})", + "login_mfa.enterToken": "請輸入您的行動裝置驗證應用程式的驗證碼,以完成登入流程。", + "login_mfa.token": "輸入多因子驗證代符", + "login_mfa.tokenReq": "請輸入多因子驗證代符", + "markdown.latex.error": "Latex 算繪錯誤", + "markdown.max_nodes.error": "此訊息過長,因此無法在行動裝置上完整顯示。請使用桌面版來檢視,或聯絡管理員來提高限制。", + "mentions.empty.paragraph": "當他人提及您或您監控中的詞語時,就會在此處看到訊息。", + "mentions.empty.title": "尚無提及", + "mobile.about.appVersion": "應用程式版本:{version}(組建 {number})", "mobile.account.settings.save": "儲存", - "mobile.action_menu.select": "選擇選項", - "mobile.add_team.create_team": "", - "mobile.add_team.join_team": "", + "mobile.acknowledgements.header": "致謝", + "mobile.action_menu.select": "選取選項", + "mobile.add_team.create_team": "建立新團隊", + "mobile.add_team.join_team": "加入其他團隊", "mobile.android.back_handler_exit": "再按一次退回以離開", - "mobile.android.photos_permission_denied_description": "", - "mobile.android.photos_permission_denied_title": "需要存取相片庫", - "mobile.announcement_banner.title": "", - "mobile.calls_call_ended": "", - "mobile.calls_call_screen": "", - "mobile.calls_call_thread": "", - "mobile.calls_current_call": "", - "mobile.calls_disable": "", - "mobile.calls_dismiss": "", - "mobile.calls_enable": "", - "mobile.calls_end_call_title": "", - "mobile.calls_end_msg_channel": "", - "mobile.calls_end_msg_channel_default": "", - "mobile.calls_end_msg_dm": "", - "mobile.calls_end_permission_msg": "", - "mobile.calls_end_permission_title": "", - "mobile.calls_ended_at": "", - "mobile.calls_error_message": "", - "mobile.calls_error_title": "", - "mobile.calls_host": "", - "mobile.calls_host_rec": "", - "mobile.calls_host_rec_error": "", - "mobile.calls_host_rec_error_title": "", - "mobile.calls_host_rec_stopped": "", - "mobile.calls_host_rec_stopped_title": "", - "mobile.calls_host_rec_title": "", - "mobile.calls_join_call": "", - "mobile.calls_lasted": "", - "mobile.calls_leave": "", - "mobile.calls_leave_call": "", - "mobile.calls_limit_msg": "", - "mobile.calls_limit_msg_GA": "", - "mobile.calls_limit_reached": "", - "mobile.calls_lower_hand": "", - "mobile.calls_mic_error": "", - "mobile.calls_more": "", - "mobile.calls_mute": "", - "mobile.calls_name_started_call": "", - "mobile.calls_noone_talking": "", - "mobile.calls_not_available_msg": "", - "mobile.calls_not_available_option": "", - "mobile.calls_not_available_title": "", - "mobile.calls_not_connected": "", - "mobile.calls_ok": "", - "mobile.calls_okay": "", - "mobile.calls_open_channel": "", - "mobile.calls_participant_limit_title_GA": "", - "mobile.calls_participant_rec": "", - "mobile.calls_participant_rec_title": "", - "mobile.calls_raise_hand": "", - "mobile.calls_react": "", - "mobile.calls_rec": "", - "mobile.calls_record": "", - "mobile.calls_recording_start_in_progress": "", - "mobile.calls_recording_start_no_permissions": "", - "mobile.calls_recording_stop_no_permissions": "", - "mobile.calls_recording_stop_none_in_progress": "", - "mobile.calls_request_message": "", - "mobile.calls_request_title": "", - "mobile.calls_see_logs": "", - "mobile.calls_speaker": "", - "mobile.calls_start_call": "", - "mobile.calls_start_call_exists": "", - "mobile.calls_stop_recording": "", - "mobile.calls_unmute": "", - "mobile.calls_viewing_screen": "", - "mobile.calls_you": "", - "mobile.camera_photo_permission_denied_description": "", - "mobile.camera_photo_permission_denied_title": "{applicationName}想要存取您的相機", - "mobile.camera_type.title": "", + "mobile.android.photos_permission_denied_description": "上傳圖片至您的伺服器或儲存至您的裝置。開啟設定來授予 {applicationName} 對您的圖片庫的讀取及寫入權限。", + "mobile.android.photos_permission_denied_title": "{applicationName} 想要存取您的圖片", + "mobile.announcement_banner.title": "宣布", + "mobile.calls_audio_device": "選取音訊裝置", + "mobile.calls_bluetooth": "藍牙", + "mobile.calls_call_ended": "通話已結束", + "mobile.calls_call_screen": "通話", + "mobile.calls_call_thread": "通話討論串", + "mobile.calls_cancel": "取消", + "mobile.calls_captions": "字幕", + "mobile.calls_captions_turned_on": "即時字幕已經開啟", + "mobile.calls_disable": "停用通話", + "mobile.calls_dismiss": "忽略", + "mobile.calls_enable": "啟用通話", + "mobile.calls_end_call_title": "結束通話", + "mobile.calls_end_msg_channel": "確定要結束 {displayName} 中有 {numParticipants} 位與會者的通話嗎?", + "mobile.calls_end_msg_channel_default": "確定要結束通話嗎?", + "mobile.calls_end_msg_dm": "確定要結束與 {displayName} 的通話嗎?", + "mobile.calls_end_permission_msg": "您沒有結束通話的權限。請要求通話的建立者來結束通話。", + "mobile.calls_end_permission_title": "錯誤", + "mobile.calls_ended_at": "結束於", + "mobile.calls_error_message": "錯誤:{error}", + "mobile.calls_error_title": "錯誤", + "mobile.calls_group_calls_not_available": "通話僅能於私人訊息頻道中使用。", + "mobile.calls_headset": "耳機", + "mobile.calls_hide_cc": "隱藏即時字幕", + "mobile.calls_host": "主持人", + "mobile.calls_host_controls": "主辦人控制項", + "mobile.calls_host_end_confirm": "為所有人結束通話", + "mobile.calls_host_leave_confirm": "離開通話", + "mobile.calls_host_leave_title": "您確定要離開這個通話?", + "mobile.calls_host_rec": "您正在錄製此會議。請考慮讓所有人知道此會議正在錄製。", + "mobile.calls_host_rec_error": "請再次嘗試錄製。您也可以聯絡您的系統管理員進行疑難排解。", + "mobile.calls_host_rec_error_title": "錄製時發生錯誤", + "mobile.calls_host_rec_stop_body": "通話錄音將被處理並發佈於該通話討論串。您確定要停止錄音嗎?", + "mobile.calls_host_rec_stop_confirm": "停止錄音", + "mobile.calls_host_rec_stop_title": "停止錄音", + "mobile.calls_host_rec_stopped": "當完成處理時,您可以在此通話的聊天討論串找到錄影。", + "mobile.calls_host_rec_stopped_title": "已結束錄製。正在處理…", + "mobile.calls_host_rec_title": "您正在錄製", + "mobile.calls_host_rec_trans_stop_body": "通話錄音與文字轉錄檔案將被處理並發佈在通話討論串。您確定要停止錄音和文字轉錄嗎?", + "mobile.calls_host_rec_trans_stop_title": "停止錄音和文字轉錄", + "mobile.calls_host_transcription": "請考慮讓所有人了解此會議正在錄製與謄寫。", + "mobile.calls_host_transcription_title": "錄製及謄寫已開始", + "mobile.calls_incoming_dm": "{name} 正在邀請您加入通話", + "mobile.calls_incoming_gm": "{name} 邀請您加入有 {num, plural, one {# 位與會者} other {# 位與會者}}的通話", + "mobile.calls_join": "加入", + "mobile.calls_join_call": "加入通話", + "mobile.calls_joining": "加入中…", + "mobile.calls_lasted": "持續了 {duration}", + "mobile.calls_leave": "離開", + "mobile.calls_leave_call": "離開通話", + "mobile.calls_limit_msg": "通話的參與人數上限為 {maxParticipants} 位。請聯絡您的系統管理員以提高上限。", + "mobile.calls_limit_msg_GA": "升級至雲端專業版或雲端企業版,以啟用超過 {maxParticipants} 位參與者的群組通話。", + "mobile.calls_limit_reached": "已達到與會者上限", + "mobile.calls_lower_hand": "放下舉手", + "mobile.calls_make_host": "提升為會議主辦人", + "mobile.calls_mic_error": "要參與會議,開啟設定來准許 Mattermost 存取您的麥克風。", + "mobile.calls_more": "更多", + "mobile.calls_mute": "靜音", + "mobile.calls_mute_others": "靜音其他人", + "mobile.calls_mute_participant": "靜音參與者", + "mobile.calls_name_is_talking_postfix": "正在發言…", + "mobile.calls_noone_talking": "沒有人在說話", + "mobile.calls_not_available_msg": "請聯絡您的系統管理員以啟用此功能。", + "mobile.calls_not_available_option": "(無法使用)", + "mobile.calls_not_available_title": "通話功能尚未啟用", + "mobile.calls_not_connected": "您尚未連線至目前頻道的通話。", + "mobile.calls_ok": "確定", + "mobile.calls_okay": "確定", + "mobile.calls_open_channel": "開啟頻道", + "mobile.calls_participant_limit_title_GA": "通話人數已滿", + "mobile.calls_participant_rec": "主持人已開始錄製此會議。停留在此會議即表示您同意被錄製。", + "mobile.calls_participant_rec_title": "正在錄製", + "mobile.calls_participant_transcription": "主持人已開始錄製及謄寫此會議。留在會議即表示同意被錄製及謄寫。", + "mobile.calls_participant_transcription_title": "錄製及謄寫正在進行中", + "mobile.calls_participants": "參與者", + "mobile.calls_people": "參與者", + "mobile.calls_phone": "手機", + "mobile.calls_quality_warning": "通話品質可能會因網路狀況不穩定而降低。", + "mobile.calls_raise_hand": "舉手", + "mobile.calls_raised_hand": "{name} {num, plural, =0 {} other {+# 位}}舉起了手", + "mobile.calls_react": "反應", + "mobile.calls_record": "錄製", + "mobile.calls_recording_start_in_progress": "已在錄製中。", + "mobile.calls_recording_start_no_permissions": "您沒有啟動錄製的權限。請通知通話主持人來啟動錄製。", + "mobile.calls_recording_stop_no_permissions": "您沒有停止錄製的權限。請通知通話主持人來停止錄製。", + "mobile.calls_recording_stop_none_in_progress": "沒有進行中的錄製。", + "mobile.calls_remove": "移除", + "mobile.calls_remove_alert_body": "您確定要從此通話移除 {displayName} 嗎? ", + "mobile.calls_remove_alert_title": "移除參與者", + "mobile.calls_remove_participant": "從通話中移除", + "mobile.calls_removed_alert_body": "主辦人已經將您從通話中移除。", + "mobile.calls_removed_alert_title": "您已被從通話中移除", + "mobile.calls_request_message": "通話功能正在測試模式中,且只能由系統管理員發起。請直接聯絡您的系統管理員以取得協助", + "mobile.calls_request_title": "通話功能目前尚未啟用", + "mobile.calls_see_logs": "檢視伺服器紀錄檔", + "mobile.calls_show_cc": "顯示即時字幕", + "mobile.calls_speaker": "喇叭", + "mobile.calls_start_call": "發起通話", + "mobile.calls_start_call_exists": "此頻道已有進行中的通話。", + "mobile.calls_started_call": "通話已經開始", + "mobile.calls_starting": "正在開始...", + "mobile.calls_stop_recording": "停止錄製", + "mobile.calls_stop_screenshare": "停止螢幕共享", + "mobile.calls_tablet": "平板電腦", + "mobile.calls_thread": "討論串", + "mobile.calls_unmute": "解除靜音", + "mobile.calls_user_left_channel_error_message": "您已退出頻道,並從通話離線。", + "mobile.calls_user_left_channel_error_title": "您退出了頻道", + "mobile.calls_user_removed_from_channel_error_message": "您已被移出頻道,並從通話離線。", + "mobile.calls_user_removed_from_channel_error_title": "您已被從群組移除", + "mobile.calls_view_profile": "查看客人檔案", + "mobile.calls_viewing_screen": "正在檢視 {name} 的螢幕畫面", + "mobile.calls_you": "(您)", + "mobile.calls_you_2": "您", + "mobile.camera_photo_permission_denied_description": "上傳圖片至您的伺服器或儲存至您的裝置。開啟設定來准許 {applicationName} 對您的相機的讀取及寫入權限。", + "mobile.camera_photo_permission_denied_title": "{applicationName} 想要存取您的相機", + "mobile.camera_type.title": "相機選項", + "mobile.channel_add_members.error": "發生錯誤,因此我們無法將使用者新增至頻道。", "mobile.channel_info.alertNo": "否", "mobile.channel_info.alertYes": "是", - "mobile.channel_list.recent": "", - "mobile.channel_list.unreads": "", - "mobile.commands.error_title": "執行指令時發生錯誤", - "mobile.components.select_server_view.connect": "已連線", - "mobile.components.select_server_view.connecting": "", - "mobile.components.select_server_view.displayHelp": "", - "mobile.components.select_server_view.displayName": "", + "mobile.channel_list.recent": "近期使用", + "mobile.channel_list.unreads": "未讀", + "mobile.commands.error_title": "執行命令時發生錯誤", + "mobile.components.select_server_view.connect": "連線", + "mobile.components.select_server_view.connecting": "正在連線", + "mobile.components.select_server_view.displayHelp": "為您的伺服器取一個顯示名稱", + "mobile.components.select_server_view.displayName": "顯示名稱", "mobile.components.select_server_view.enterServerUrl": "輸入伺服器網址", - "mobile.components.select_server_view.msg_connect": "", - "mobile.components.select_server_view.msg_description": "", - "mobile.components.select_server_view.msg_welcome": "", + "mobile.components.select_server_view.msg_connect": "連線至伺服器吧", + "mobile.components.select_server_view.msg_description": "伺服器是您的團隊的溝通中樞,可以透過唯一的網址來存取", + "mobile.components.select_server_view.msg_welcome": "歡迎", "mobile.components.select_server_view.proceed": "繼續", "mobile.create_channel": "建立", - "mobile.create_channel.title": "", - "mobile.create_direct_message.max_limit_reached": "", - "mobile.create_direct_message.start": "", - "mobile.create_post.read_only": "", - "mobile.custom_list.no_results": "", - "mobile.custom_status.choose_emoji": "", - "mobile.custom_status.clear_after": "", - "mobile.custom_status.clear_after.title": "", - "mobile.custom_status.modal_confirm": "", - "mobile.direct_message.error": "", - "mobile.display_settings.clockDisplay": "", - "mobile.display_settings.crt": "", - "mobile.display_settings.theme": "主題", - "mobile.display_settings.timezone": "", - "mobile.document_preview.failed_description": "開啟文件時發生錯誤。請確定有安裝 {fileType} 觀看程式並再次嘗試。", + "mobile.create_channel.title": "新頻道", + "mobile.create_direct_message.max_limit_reached": "群組訊息人數上限為 {maxCount} 位成員", + "mobile.create_direct_message.start": "開始對話", + "mobile.create_post.read_only": "此頻道為唯讀。", + "mobile.custom_list.no_results": "沒有結果", + "mobile.custom_status.choose_emoji": "選擇表情符號", + "mobile.custom_status.clear_after": "在…後清除", + "mobile.custom_status.clear_after.title": "於指定時間後清除自訂狀態", + "mobile.custom_status.modal_confirm": "完成", + "mobile.deep_link.invalid": "您試圖開啟的連結無效。", + "mobile.diagnostic_id.empty": "此伺服器缺少 DiagnosticId 值。請聯絡您的系統管理員以檢視此值並重新啟動伺服器。", + "mobile.direct_message.error": "我們無法開啟 {displayName} 的私訊。", + "mobile.display_settings.clockDisplay": "顯示時間", + "mobile.display_settings.crt": "收合回覆討論串", + "mobile.display_settings.theme": "佈景主題", + "mobile.display_settings.timezone": "時區", + "mobile.document_preview.failed_description": "開啟文件時發生錯誤。請確定有安裝 {fileType} 檢視程式並再次嘗試。\n", "mobile.document_preview.failed_title": "開啟文件失敗", - "mobile.downloader.disabled_description": "檔案下載在此伺服器被停用。請聯絡系統管理員。", + "mobile.downloader.disabled_description": "檔案下載在此伺服器被停用。請聯絡系統管理員。\n", "mobile.downloader.disabled_title": "下載已被停用", - "mobile.downloader.failed_description": "下載檔案時失敗。請檢查網路連線並再次嘗試。", + "mobile.downloader.failed_description": "下載檔案時失敗。請檢查網路連線並重試。\n", "mobile.downloader.failed_title": "下載失敗", "mobile.edit_channel": "儲存", - "mobile.edit_post.delete_question": "", - "mobile.edit_post.delete_title": "", - "mobile.edit_post.error": "", + "mobile.edit_post.delete_question": "確定要刪除此訊息嗎?", + "mobile.edit_post.delete_title": "確認刪除貼文", + "mobile.edit_post.error": "編輯此訊息時發生問題。請重試。", "mobile.edit_post.title": "編輯訊息", "mobile.error_handler.button": "重新啟動", - "mobile.error_handler.description": "\n點擊重新啟動以再次開啟 app。重新啟動後可以經由設定選單來回報問題。\n", + "mobile.error_handler.description": "\n按下重新啟動以再次開啟應用程式。重新啟動後可以經由設定選單來回報問題。\n", "mobile.error_handler.title": "發生未預期的錯誤", - "mobile.file_upload.disabled2": "", - "mobile.file_upload.max_warning": "上傳最多 5 個檔案。", - "mobile.files_paste.error_description": "貼上檔案時發生錯誤。請重新嘗試。", - "mobile.files_paste.error_dismiss": "解除", + "mobile.file_upload.disabled2": "來自行動裝置的檔案上傳已被停用。", + "mobile.file_upload.max_warning": "上傳最多 {count} 個檔案。", + "mobile.files_paste.error_description": "貼上檔案時發生錯誤。請重試。", + "mobile.files_paste.error_dismiss": "忽略", "mobile.files_paste.error_title": "貼上失敗", - "mobile.gallery.title": "", - "mobile.integration_selector.loading_channels": "", - "mobile.integration_selector.loading_options": "", - "mobile.ios.photos_permission_denied_description": "", - "mobile.ios.photos_permission_denied_title": "需要存取相片庫", - "mobile.join_channel.error": "", - "mobile.leave_and_join_confirmation": "", - "mobile.leave_and_join_message": "", - "mobile.leave_and_join_title": "", - "mobile.link.error.text": "", - "mobile.link.error.title": "", - "mobile.login_options.cant_heading": "", - "mobile.login_options.enter_credentials": "", - "mobile.login_options.gitlab": "", - "mobile.login_options.google": "", - "mobile.login_options.heading": "", - "mobile.login_options.none": "", - "mobile.login_options.office365": "", - "mobile.login_options.openid": "", - "mobile.login_options.saml": "", - "mobile.login_options.select_option": "", - "mobile.login_options.separator_text": "", - "mobile.manage_members.admin": "", - "mobile.manage_members.cancel": "", - "mobile.manage_members.change_role.error": "", - "mobile.manage_members.done": "", - "mobile.manage_members.make_channel_admin": "", - "mobile.manage_members.make_channel_member": "", - "mobile.manage_members.manage": "", - "mobile.manage_members.manage_member": "", - "mobile.manage_members.member": "", - "mobile.manage_members.message": "", - "mobile.manage_members.remove": "", - "mobile.manage_members.remove_member": "", - "mobile.manage_members.section_title_admins": "", - "mobile.manage_members.section_title_members": "", + "mobile.gallery.title": "{index}/{total}", + "mobile.integration_selector.loading_channels": "正在載入頻道…", + "mobile.integration_selector.loading_options": "正在載入選項…", + "mobile.ios.photos_permission_denied_description": "上傳圖片及影片至您的伺服器或儲存至您的裝置。開啟設定來准許 {applicationName} 取得您的圖片及影片庫的讀取與寫入權限。", + "mobile.ios.photos_permission_denied_title": "{applicationName} 想要存取您的圖片", + "mobile.ios.plist.NSAppleMusicUsageDescription": "啟用媒體庫存取即表示您可以在 {applicationName} 中為您的訊息夾帶媒體庫檔案。", + "mobile.ios.plist.NSBluetoothAlwaysUsageDescription": "啟用藍牙存取即表示我們可以在您的裝置及用戶端間同步內容。", + "mobile.ios.plist.NSBluetoothPeripheralUsageDescription": "啟用藍牙存取即表示我們可以在通話時連結音訊周邊設備,且可在您的裝置及用戶端間同步內容。", + "mobile.ios.plist.NSCameraUsageDescription": "允許存取相機可讓您拍攝照片或影片,並附加於訊息。", + "mobile.ios.plist.NSFaceIDUsageDescription": "允許存取 Face ID 即表示我們可以限制未經授權的使用者在您的裝置上存取 {applicationName}。", + "mobile.ios.plist.NSLocationAlwaysUsageDescription": "啟用定位資訊存取即表示我們可以為您分享於 {applicationName} 中的照片及影片,加上定位中繼資料。", + "mobile.ios.plist.NSLocationWhenInUseUsageDescription": "啟用定位資訊存取即表示我們可以為您分享於 {applicationName} 中的照片及影片,加上定位中繼資料。", + "mobile.ios.plist.NSMicrophoneUsageDescription": "啟用存取您的裝置麥克風即表示您可以擷取音訊以用於通話,或用於分享至 {applicationName} 的影片。", + "mobile.ios.plist.NSPhotoLibraryAddUsageDescription": "允許圖片庫寫入權限即表示您可以儲存從 {applicationName} 下載的圖片及影片至裝置上。", + "mobile.ios.plist.NSPhotoLibraryUsageDescription": "允許圖片庫存取可讓您選擇圖片及影片,並附加於訊息。", + "mobile.ios.plist.NSSpeechRecognitionUsageDescription": "允許您的裝置傳送使用者資料給 Apple 即表示您可以傳送語音訊息給 {applicationName}。", + "mobile.join_channel.error": "我們無法加入頻道 {displayName}。", + "mobile.leave_and_join_confirmation": "退出並加入", + "mobile.leave_and_join_message": "您已在 ~{leaveChannelName} 的群組通話中。確定要離開目前的通話並加入 ~{joinChannelName} 的嗎?", + "mobile.leave_and_join_title": "確定要切換至不同的通話嗎?", + "mobile.link.error.text": "無法開啟連結。", + "mobile.link.error.title": "錯誤", + "mobile.login_options.cant_heading": "無法登入", + "mobile.login_options.enter_credentials": "在下方輸入您的登入資訊。", + "mobile.login_options.entraid": "Entra ID", + "mobile.login_options.gitlab": "GitLab", + "mobile.login_options.google": "Google", + "mobile.login_options.heading": "登入您的帳號", + "mobile.login_options.none": "您還不能登入帳號。至少須設定一個登入選項。請聯絡您的系統管理員以獲得協助。", + "mobile.login_options.openid": "Open ID", + "mobile.login_options.saml": "SAML", + "mobile.login_options.select_option": "選取下方的登入選項。", + "mobile.login_options.separator_text": "或透過下列方式登入", + "mobile.manage_members.admin": "管理員", + "mobile.manage_members.cancel": "取消", + "mobile.manage_members.change_role.error": "嘗試更新角色時發生錯誤。請檢查您的網路連線並再試一次。", + "mobile.manage_members.done": "完成", + "mobile.manage_members.make_channel_admin": "設為頻道管理員", + "mobile.manage_members.make_channel_member": "設為頻道成員", + "mobile.manage_members.manage": "管理", + "mobile.manage_members.manage_member": "管理成員", + "mobile.manage_members.member": "成員", + "mobile.manage_members.message": "確定要從頻道移除已選取的成員嗎?", + "mobile.manage_members.remove": "移除", + "mobile.manage_members.remove_member": "從頻道中移除", + "mobile.manage_members.section_title_admins": "頻道管理員", + "mobile.manage_members.section_title_members": "成員", "mobile.managed.blocked_by": "被 {vendor} 阻擋", "mobile.managed.exit": "離開", - "mobile.managed.jailbreak": "{vendor} 不信任越獄後的裝置,請關閉應用程式。", - "mobile.managed.jailbreak_no_debug_info": "", - "mobile.managed.jailbreak_no_reason": "", - "mobile.managed.not_secured.android": "這裝置必須要設定螢幕鎖以使用 Mattermost。", - "mobile.managed.not_secured.ios": "這裝置必須要設定密碼以使用 Mattermost前往 設定 > Face ID 與密碼", - "mobile.managed.not_secured.ios.touchId": "這裝置必須要設定密碼以使用 Mattermost。前往 設定 > Touch ID 與密碼", + "mobile.managed.jailbreak": "{vendor} 不信任越獄後的裝置。\n\n請結束應用程式。", + "mobile.managed.not_secured.android": "此裝置必須設定螢幕鎖定,才能使用 Mattermost。", + "mobile.managed.not_secured.ios": "此裝置必須設定密碼才能使用 Mattermost。\n\n前往「設定」>「Face ID 與密碼」。", + "mobile.managed.not_secured.ios.touchId": "此裝置必須設定密碼才能使用 Mattermost。\n\n前往「設定」>「Touch ID 與密碼」。", "mobile.managed.secured_by": "受到 {vendor} 保護", "mobile.managed.settings": "前往設定", "mobile.markdown.code.copy_code": "複製代碼", - "mobile.markdown.code.plusMoreLines": "以及其他 {count, number} 個檔案", + "mobile.markdown.code.plusMoreLines": "以及其他 {count, number} 行", + "mobile.markdown.copy_header": "複製標題文字", "mobile.markdown.image.too_large": "圖片超過最大尺寸 {maxWidth}x{maxHeight}:", - "mobile.markdown.link.copy_url": "複製 URL", + "mobile.markdown.link.copy_url": "複製網址", "mobile.mention.copy_mention": "複製提及", - "mobile.message_length.message": "當前的訊息過長。字數統計:{max}/{count}", + "mobile.message_length.message": "目前的訊息過長。字數統計:{count}/{max}", "mobile.message_length.message_split_left": "訊息超過長度限制", "mobile.message_length.title": "訊息長度", - "mobile.no_results.spelling": "", - "mobile.no_results_with_term": "", - "mobile.no_results_with_term.files": "", - "mobile.no_results_with_term.messages": "", - "mobile.oauth.failed_to_login": "", - "mobile.oauth.failed_to_open_link": "", - "mobile.oauth.failed_to_open_link_no_browser": "", - "mobile.oauth.something_wrong": "", - "mobile.oauth.something_wrong.okButton": "", - "mobile.oauth.switch_to_browser": "", - "mobile.oauth.switch_to_browser.error_title": "", - "mobile.oauth.switch_to_browser.title": "", - "mobile.oauth.try_again": "", - "mobile.onboarding.next": "", - "mobile.onboarding.sign_in": "", - "mobile.onboarding.sign_in_to_get_started": "", - "mobile.open_dm.error": "", - "mobile.open_gm.error": "無法開啟與這些使用者的直接傳訊。請檢查連線並再試一次。", - "mobile.participants.header": "", + "mobile.no_results.spelling": "檢查拼字或嘗試搜尋其他字詞。", + "mobile.no_results_with_term": "沒有「{term}」的結果", + "mobile.no_results_with_term.files": "沒有符合「{term}」的檔案", + "mobile.no_results_with_term.messages": "沒有符合「{term}」的項目", + "mobile.oauth.failed_to_login": "登入失敗。請再試一次。", + "mobile.oauth.failed_to_open_link": "無法開啟連結。請再試一次。", + "mobile.oauth.failed_to_open_link_no_browser": "無法開啟連結。請確認裝置上已安裝瀏覽器。", + "mobile.oauth.something_wrong.okButton": "確定", + "mobile.oauth.success.description": "登入中,請稍候...", + "mobile.oauth.success.title": "驗證成功", + "mobile.oauth.switch_to_browser": "正在將您重新導向至登入提供者", + "mobile.oauth.switch_to_browser.error_title": "登入錯誤", + "mobile.oauth.switch_to_browser.title": "正在重新導向…", + "mobile.oauth.try_again": "重試", + "mobile.onboarding.next": "下一步", + "mobile.onboarding.sign_in": "登入", + "mobile.onboarding.sign_in_to_get_started": "登入以開始使用", + "mobile.open_dm.error": "我們無法開啟 {displayName} 的私人訊息。請檢查連線後再重試一次。", + "mobile.open_gm.error": "無法開啟與這些使用者的群組訊息。請檢查連線並再試一次。", + "mobile.participants.header": "討論串參與者", "mobile.permission_denied_dismiss": "不允許", "mobile.permission_denied_retry": "設定", "mobile.post.cancel": "取消", - "mobile.post.delete_question": "確定要刪除此訊息嘛?", + "mobile.post.delete_question": "確定要刪除此訊息嗎?", "mobile.post.delete_title": "刪除訊息", "mobile.post.failed_delete": "刪除訊息", "mobile.post.failed_retry": "重試", "mobile.post_info.add_reaction": "新增反應", "mobile.post_info.copy_text": "複製文字", - "mobile.post_info.mark_unread": "標為尚未閱讀", + "mobile.post_info.mark_unread": "標示為未讀", "mobile.post_info.pin": "釘選至頻道", "mobile.post_info.reply": "回覆", - "mobile.post_info.save": "", + "mobile.post_info.save": "儲存", "mobile.post_info.unpin": "解除釘選", - "mobile.post_info.unsave": "", + "mobile.post_info.unsave": "取消儲存", "mobile.post_pre_header.pinned": "已釘選", - "mobile.post_pre_header.pinned_saved": "", - "mobile.post_pre_header.saved": "", + "mobile.post_pre_header.pinned_saved": "釘選並儲存", + "mobile.post_pre_header.saved": "已儲存", "mobile.post_textbox.entire_channel.cancel": "取消", "mobile.post_textbox.entire_channel.confirm": "確認", - "mobile.post_textbox.entire_channel.message": "使用 @all 或 @channel 將會發送通知給 {totalMembers} 位成員。確定要執行?", - "mobile.post_textbox.entire_channel.message.with_timezones": "使用 @all 或 @channel 將會發送通知給 {totalMembers} 位處於 {timezones, number} 個不同時區的成員。確定要執行?", - "mobile.post_textbox.entire_channel.title": "確認對整個頻道發送通知", - "mobile.post_textbox.entire_channel_here.message": "", - "mobile.post_textbox.entire_channel_here.message.with_timezones": "", - "mobile.post_textbox.groups.title": "確認發送至群組的通知", - "mobile.post_textbox.uploadFailedDesc": "部份附加檔案上傳時失敗,請再次確定要發布此訊息?", + "mobile.post_textbox.entire_channel.message": "使用 @all 或 @channel 將會發送通知給{totalMembers, number}位成員。確定要執行?", + "mobile.post_textbox.entire_channel.message.with_timezones": "使用 @all 或 @channel 將會發送通知給 {totalMembers, number} 位處於 {timezones, number} 個不同時區的成員。確定要執行?", + "mobile.post_textbox.entire_channel.title": "確認對整個頻道傳送通知", + "mobile.post_textbox.entire_channel_here.message": "使用 @here 將會傳送通知給至多 {totalMembers, number} {totalMembers, plural, one {人} other {人}}。確定要執行?", + "mobile.post_textbox.entire_channel_here.message.with_timezones": "使用 @here 表示您將傳送通知給至多 {totalMembers, number} {totalMembers, plural, one {位} other {位}}分屬 {timezones, number} {timezones, plural, one {個時區} other {個時區}}的使用者。確定要執行嗎?", + "mobile.post_textbox.groups.title": "確認傳送至群組的通知", + "mobile.post_textbox.uploadFailedDesc": "無法上傳部分附加檔案至伺服器。確定是否要發布此訊息?", "mobile.post_textbox.uploadFailedTitle": "附加檔案失敗", - "mobile.privacy_link": "隱私政策", + "mobile.privacy_link": "隱私權條款", "mobile.push_notification_reply.button": "送出", - "mobile.push_notification_reply.placeholder": "輸入回覆...", + "mobile.push_notification_reply.placeholder": "輸入回覆…", "mobile.push_notification_reply.title": "回覆", "mobile.rename_channel.display_name_maxLength": "頻道名稱必須少於 {maxLength, number} 字", "mobile.rename_channel.display_name_minLength": "頻道名稱必須至少為 {minLength, number} 個字", - "mobile.rename_channel.display_name_required": "需要頻道名稱", - "mobile.request.invalid_request_method": "", + "mobile.rename_channel.display_name_required": "頻道名稱為必填", + "mobile.request.invalid_request_method": "無效的請求方法", "mobile.request.invalid_response": "從伺服器傳來無效的回應。", "mobile.reset_status.alert_cancel": "取消", - "mobile.reset_status.alert_ok": "", - "mobile.reset_status.title_ooo": "停用\"不在辦公室\"?", + "mobile.reset_status.alert_ok": "確定", + "mobile.reset_status.title_ooo": "停用「不在辦公室」?", "mobile.routes.code": "{language} 代碼", "mobile.routes.code.noLanguage": "代碼", - "mobile.routes.custom_status": "", + "mobile.routes.custom_status": "設定自訂狀態", "mobile.routes.table": "表格", "mobile.routes.user_profile": "個人檔案", - "mobile.screen.settings": "", - "mobile.screen.your_profile": "", - "mobile.search.jump": "移動至最新的訊息", - "mobile.search.modifier.exclude": "", - "mobile.search.modifier.from": "", - "mobile.search.modifier.in": "", - "mobile.search.modifier.phrases": "", - "mobile.search.show_less": "", - "mobile.search.show_more": "", - "mobile.search.team.select": "", - "mobile.server_identifier.exists": "", - "mobile.server_link.error.text": "該連結不存在於本伺服器。", + "mobile.screen.settings": "設定", + "mobile.screen.your_profile": "你的個人檔案", + "mobile.search.jump": "跳至最新的訊息", + "mobile.search.modifier.exclude": "排除搜尋詞彙", + "mobile.search.modifier.from": "特定使用者張貼的訊息", + "mobile.search.modifier.in": "特定頻道內的訊息", + "mobile.search.modifier.phrases": "訊息中必須包含此詞彙", + "mobile.search.results": "{count} 筆搜尋{count, plural, one {結果} other {結果}}", + "mobile.search.show_less": "顯示較少", + "mobile.search.show_more": "顯示更多", + "mobile.search.team.select": "選取要搜尋的團隊", + "mobile.server_identifier.exists": "您已連線至此伺服器。", + "mobile.server_link.error.text": "該連結不存在於此伺服器。", "mobile.server_link.error.title": "連結錯誤", - "mobile.server_link.unreachable_channel.error": "此永久連結通往被刪除的頻道或是您沒有觀看權限的頻道。", - "mobile.server_link.unreachable_team.error": "此永久連結通往被刪除的團隊或是您沒有觀看權限的團隊。", - "mobile.server_link.unreachable_user.error": "", - "mobile.server_name.exists": "", - "mobile.server_ping_failed": "", - "mobile.server_requires_client_certificate": "", + "mobile.server_link.unreachable_channel.error": "此永久連結通往被刪除的頻道或是您無權存取的頻道。", + "mobile.server_link.unreachable_team.error": "此永久連結通往被刪除的團隊或是您無權存取的團隊。", + "mobile.server_link.unreachable_user.error": "我們無法將您重新導向至私訊。無法識別指定的使用者。", + "mobile.server_name.exists": "您已將此名稱用於其他伺服器。", + "mobile.server_ping_failed": "無法連線至伺服器。", + "mobile.server_requires_client_certificate": "伺服器要求用戶端憑證以進行驗證。", "mobile.server_upgrade.button": "確定", - "mobile.server_upgrade.description": "", - "mobile.server_upgrade.title": "需要伺服器更新", - "mobile.server_url.deeplink.emm.denied": "", - "mobile.server_url.empty": "", - "mobile.server_url.invalid_format": "網址開頭必須是 http:// 或 https://", - "mobile.session_expired.title": "", + "mobile.server_upgrade.description": "\n須進行伺服器升級才能使用 Mattermost 應用程式。請洽詢您的系統管理者以取得更多詳細資訊。\n", + "mobile.server_upgrade.title": "需要升級伺服器", + "mobile.server_url.deeplink.emm.denied": "此應用程式由 EMM 控制,且 DeepLink 伺服器網址不符合 EMM 允許的伺服器", + "mobile.server_url.empty": "請輸入有效的伺服器網址", + "mobile.server_url.invalid_format": "網址必須以 http:// 或 https:// 開頭", + "mobile.session_expired.title": "工作階段已過期", + "mobile.session_expired_days": "請登入以繼續接收通知。{siteName} 的工作階段設定為每{daysCount, number}天過期。", + "mobile.session_expired_days_hrs": "請登入以繼續接收通知。{siteName} 的工作階段設定為每 {daysCount, number} {daysCount, plural, one {天} other {天}} 又 {hoursCount, number} {hoursCount, plural, one {小時} other {小時}}過期。", + "mobile.session_expired_hrs": "請登入以繼續接收通知。{siteName} 的工作階段設定為每{hoursCount, number} {hoursCount, plural, one {小時} other {小時}}過期。", "mobile.set_status.dnd": "請勿打擾", - "mobile.storage_permission_denied_description": "", - "mobile.storage_permission_denied_title": "{applicationName}想要存取您的檔案", + "mobile.storage_permission_denied_description": "上傳檔案至您的伺服器。開啟設定以准許 {applicationName} 取得此裝置的檔案讀寫權限。", + "mobile.storage_permission_denied_title": "{applicationName} 想要存取您的檔案", "mobile.suggestion.members": "成員", "mobile.system_message.channel_archived_message": "{username} 已封存頻道", "mobile.system_message.channel_unarchived_message": "{username} 已解除頻道封存", "mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} 將頻道顯示名稱從 {oldDisplayName} 改成 {newDisplayName}", - "mobile.system_message.update_channel_header_message_and_forget.removed": "{username} 已移除頻道標題(原為:{oldHeader})", + "mobile.system_message.update_channel_header_message_and_forget.removed": "{username} 已移除頻道標題(原為:{oldHeader})", "mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username} 已更新頻道標題:從 {oldHeader} 改為 {newHeader}", "mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} 已更新頻道標題為:{newHeader}", - "mobile.system_message.update_channel_purpose_message.removed": "{username} 已移除頻道用途(原為:{oldPurpose})", + "mobile.system_message.update_channel_purpose_message.removed": "{username} 已移除頻道用途(原為:{oldPurpose})", "mobile.system_message.update_channel_purpose_message.updated_from": "{username} 已更新頻道用途:從 {oldPurpose} 改為 {newPurpose}", "mobile.system_message.update_channel_purpose_message.updated_to": "{username} 已更新頻道用途為:{newPurpose}", "mobile.tos_link": "服務條款", - "mobile.user_list.deactivated": "停用", - "mobile.write_storage_permission_denied_description": "", - "modal.manual_status.auto_responder.message_": "是否將狀態改為\"{status}\"並停用自動回復?", - "modal.manual_status.auto_responder.message_away": "是否將狀態改為\"離開\"並停用自動回復?", - "modal.manual_status.auto_responder.message_dnd": "是否將狀態改為\"請勿打擾\"並停用自動回復?", - "modal.manual_status.auto_responder.message_offline": "是否將狀態改為\"離線\"並停用自動回復?", - "modal.manual_status.auto_responder.message_online": "是否將狀態改為\"線上\"並停用自動回復?", - "more_messages.text": "", - "msg_typing.areTyping": "{users}跟{last}正在打字...", - "msg_typing.isTyping": "{user}正在打字...", - "notification.message_not_found": "", - "notification.not_channel_member": "", - "notification.not_team_member": "", - "notification_settings.auto_responder": "", - "notification_settings.auto_responder.default_message": "", - "notification_settings.auto_responder.footer.message": "", - "notification_settings.auto_responder.message": "", - "notification_settings.auto_responder.to.enable": "", - "notification_settings.email": "", - "notification_settings.email.crt.emailInfo": "", - "notification_settings.email.crt.send": "", - "notification_settings.email.emailHelp2": "", - "notification_settings.email.emailInfo": "", - "notification_settings.email.everyHour": "", - "notification_settings.email.fifteenMinutes": "", - "notification_settings.email.immediately": "", - "notification_settings.email.never": "", - "notification_settings.email.send": "", - "notification_settings.mention.reply": "", - "notification_settings.mentions": "", - "notification_settings.mentions.channelWide": "", - "notification_settings.mentions.keywords": "", - "notification_settings.mentions.keywordsLabel": "", - "notification_settings.mentions.keywords_mention": "", - "notification_settings.mentions.sensitiveName": "", - "notification_settings.mentions.sensitiveUsername": "", - "notification_settings.mentions_replies": "", - "notification_settings.mobile": "", - "notification_settings.mobile.away": "", - "notification_settings.mobile.offline": "", - "notification_settings.mobile.online": "", - "notification_settings.mobile.trigger_push": "", - "notification_settings.ooo_auto_responder": "", - "notification_settings.pushNotification.all_new_messages": "", - "notification_settings.pushNotification.disabled_long": "", - "notification_settings.pushNotification.mentions_only": "", - "notification_settings.pushNotification.nothing": "", - "notification_settings.push_notification": "", - "notification_settings.push_threads.following": "", - "notification_settings.push_threads.replies": "", - "notification_settings.send_notification.about": "", - "notification_settings.threads_mentions": "", - "notification_settings.threads_start": "", - "notification_settings.threads_start_participate": "", - "onboarding.calls": "", - "onboarding.calls_description": "", - "onboarding.integrations": "", - "onboarding.integrations_description": "", - "onboarding.realtime_collaboration": "", - "onboarding.realtime_collaboration_description": "", - "onboarding.welcome": "", - "onboaring.welcome_description": "", + "mobile.user_list.deactivated": "被停權", + "mobile.write_storage_permission_denied_description": "儲存檔案至您的裝置。開啟設定以准許 {applicationName} 取得此裝置的檔案寫入權限。", + "modal.manual_status.auto_responder.message_": "是否將狀態改為「{status}」並停用自動回覆?", + "modal.manual_status.auto_responder.message_away": "是否將狀態改為「離開」並停用自動回覆?", + "modal.manual_status.auto_responder.message_dnd": "是否將狀態改為「請勿打擾」並停用自動回覆?", + "modal.manual_status.auto_responder.message_offline": "是否將狀態改為「離線」並停用自動回覆?", + "modal.manual_status.auto_responder.message_online": "是否將狀態改為「線上」並停用自動回覆?", + "more_messages.text": "{count} 則{count, plural, one {新訊息} other {新訊息}}", + "msg_typing.areTyping": "{users} 跟 {last} 正在輸入…", + "msg_typing.isTyping": "{user} 正在輸入…", + "native.ios.notifications.not_verified": "我們無法與伺服器驗證此通知", + "notification.message_not_found": "找不到訊息", + "notification.no_connection": "無法連線至伺服器,因此無法取得通知的訊息資訊。", + "notification.no_post": "找不到訊息。", + "notification.not_channel_member": "此訊息屬於您並非其成員的頻道。", + "notification.not_team_member": "此訊息屬於您沒有參加的團隊。", + "notification_settings.auto_responder": "自動回覆", + "notification_settings.auto_responder.default_message": "您好,我正在外出,因此無法回應訊息。", + "notification_settings.auto_responder.footer.message": "設定自訂訊息,以用來自動回覆私人訊息,例如外出或度假時的回覆。啟用此設定會將您的狀態變更為外出,並關閉通知。", + "notification_settings.auto_responder.message": "訊息", + "notification_settings.auto_responder.to.enable": "啟用自動回覆", + "notification_settings.call_notification": "通話通知", + "notification_settings.calls": "通話通知", + "notification_settings.calls.callsInfo": "注意:要聽到鈴聲預覽,必須關閉靜音模式。", + "notification_settings.calls.calm": "冷靜", + "notification_settings.calls.cheerful": "雀躍", + "notification_settings.calls.dynamic": "動態", + "notification_settings.calls.enable_sound": "來電通知鈴聲", + "notification_settings.calls.urgent": "緊急", + "notification_settings.calls_off": "關閉", + "notification_settings.calls_on": "開啟", + "notification_settings.email": "電子郵件通知", + "notification_settings.email.crt.emailInfo": "啟用時,您追蹤的討論串有任何回覆都會傳送電子郵件通知", + "notification_settings.email.crt.send": "討論串回覆通知", + "notification_settings.email.emailHelp2": "電子郵件已由您的系統管理員停用。不會再傳送通知信,直到重新啟用。", + "notification_settings.email.emailInfo": "將以電子郵件方式通知您在離線或離開 5 分鐘後被提及與私人訊息的內容。", + "notification_settings.email.everyHour": "每小時", + "notification_settings.email.fifteenMinutes": "每 15 分鐘", + "notification_settings.email.immediately": "立刻", + "notification_settings.email.never": "永不", + "notification_settings.email.send": "傳送電子郵件通知", + "notification_settings.mention.reply": "傳送回覆通知", + "notification_settings.mentions": "提及", + "notification_settings.mentions.channelWide": "提及整個頻道", + "notification_settings.mentions.keywords": "輸入其他關鍵字", + "notification_settings.mentions.keywordsLabel": "關鍵字不分大小寫。不同關鍵字間以半形逗號隔開。", + "notification_settings.mentions.keywords_mention": "觸發提及的關鍵字", + "notification_settings.mentions.sensitiveName": "您的名字(區分大小寫)", + "notification_settings.mentions.sensitiveUsername": "您的使用者名稱(不區分大小寫)", + "notification_settings.mentions_replies": "提及和回覆", + "notification_settings.mobile": "推播通知", + "notification_settings.mobile.away": "離開或離線", + "notification_settings.mobile.offline": "離線", + "notification_settings.mobile.online": "線上、離開或離線", + "notification_settings.mobile.trigger_push": "觸發推播通知的時機…", + "notification_settings.ooo_auto_responder": "自動回覆", + "notification_settings.pushNotification.all_new_messages": "所有新訊息", + "notification_settings.pushNotification.disabled_long": "行動裝置的推播通知已由您的系統管理員停用。", + "notification_settings.pushNotification.mentions_only": "僅提及、私人訊息及群組訊息(預設值)", + "notification_settings.pushNotification.nothing": "無", + "notification_settings.push_notification": "推播通知", + "notification_settings.push_threads.following": "通知我關於此頻道裡追蹤中的討論串回覆", + "notification_settings.push_threads.replies": "討論串回覆", + "notification_settings.send_notification.about": "通知我關於…", + "notification_settings.threads_mentions": "在討論串中提及", + "notification_settings.threads_start": "由我開始的討論串", + "notification_settings.threads_start_participate": "由我開始或我參與的討論串", + "onboarding.calls": "立即開始安全的音訊通話", + "onboarding.calls_description": "當打字不夠快時,僅需按一下就能將頻道對話切換為安全音訊通話。", + "onboarding.integrations": "整合您喜愛的工具", + "onboarding.integrations_description": "不僅是聊天工具,更緊密整合通用開發流程的產品方案。", + "onboarding.realtime_collaboration": "即時協作", + "onboarding.realtime_collaboration_description": "持續性頻道、私人訊息及檔案分享運作無間,讓您隨處都可以保持連線。", + "onboarding.welcome": "歡迎", + "onboaring.welcome_description": "Mattermost 是一款專為開發者協作打造的開放源碼平台。安全、彈性,且整合您的工具。", "password_send.description": "輸入註冊的電子郵件地址以重設密碼", - "password_send.error": "請輸入一個有效的電子郵件地址。", - "password_send.generic_error": "", - "password_send.link": "如果帳號存在,將會寄送密碼重置郵件至:", - "password_send.link.title": "", - "password_send.reset": "", - "password_send.return": "", - "permalink.error.access.text": "", - "permalink.error.access.title": "", - "permalink.error.cancel": "", - "permalink.error.okay": "", - "permalink.error.private_channel.button": "", - "permalink.error.private_channel.text": "", - "permalink.error.private_channel.title": "", - "permalink.error.private_channel_and_team.button": "", - "permalink.error.private_channel_and_team.text": "", - "permalink.error.private_channel_and_team.title": "", - "permalink.error.public_channel.button": "", - "permalink.error.public_channel.text": "", - "permalink.error.public_channel.title": "", - "permalink.error.public_channel_and_team.button": "", - "permalink.error.public_channel_and_team.text": "", - "permalink.error.public_channel_and_team.title": "", - "permalink.show_dialog_warn.cancel": "", - "permalink.show_dialog_warn.description": "", - "permalink.show_dialog_warn.join": "", - "permalink.show_dialog_warn.title": "", - "pinned_messages.empty.paragraph": "", - "pinned_messages.empty.title": "", - "plus_menu.browse_channels.title": "", - "plus_menu.create_new_channel.title": "", - "plus_menu.invite_people_to_team.title": "", - "plus_menu.open_direct_message.title": "", - "post.options.title": "", - "post.reactions.title": "", - "post_body.check_for_out_of_channel_groups_mentions.message": "沒有因這個提及而收到通知,因為他們不在頻道中。由於他們不是連結群組的成員,無法將其加入此頻道。如要將使用者加入此頻道,必須將他們加入連結群組。", - "post_body.check_for_out_of_channel_mentions.link.and": "與", + "password_send.error": "請輸入有效的電子郵件地址。", + "password_send.generic_error": "我們無法寄送密碼重設連結給您。請聯絡您的系統管理員以獲得協助。", + "password_send.link": "如果帳號存在,將會寄送密碼重設郵件至:", + "password_send.link.title": "已寄送重設連結", + "password_send.reset": "重設您的密碼", + "password_send.return": "回到登入畫面", + "permalink.error.access.text": "您嘗試檢視的訊息屬於您無權存取的頻道,或者已被刪除。", + "permalink.error.access.title": "無法檢視的訊息", + "permalink.error.cancel": "取消", + "permalink.error.okay": "確定", + "permalink.error.private_channel.button": "加入頻道", + "permalink.error.private_channel.text": "您嘗試檢視的訊息屬於您未被邀請參加的私人頻道,但您可以管理員身份存取。您是否仍要加入 **{channelName}**?", + "permalink.error.private_channel.title": "加入私人頻道", + "permalink.error.private_channel_and_team.button": "加入頻道及團隊", + "permalink.error.private_channel_and_team.text": "您嘗試檢視的訊息屬於一個團隊的私人頻道,而您尚未成為團隊成員。但您可以管理員身份存取。是否要加入 **{channelName}** 及 **{teamName}** 團隊來檢視?", + "permalink.error.private_channel_and_team.title": "加入私人頻道及團隊", + "permalink.error.public_channel.button": "加入頻道", + "permalink.error.public_channel.text": "您嘗試檢視的訊息屬於您尚未加入的頻道。是否要加入 **{channelName}** 來檢視?", + "permalink.error.public_channel.title": "加入頻道", + "permalink.error.public_channel_and_team.button": "加入頻道及團隊", + "permalink.error.public_channel_and_team.text": "您嘗試檢視的訊息屬於您未加入的頻道及團隊。您是否要加入 **{channelName}** 及 **{teamName}** 團隊來檢視它?", + "permalink.error.public_channel_and_team.title": "加入頻道及團隊", + "permalink.show_dialog_warn.cancel": "取消", + "permalink.show_dialog_warn.description": "您將加入 {channel} 而不由頻道管理員明確加入。確定要加入此私人頻道嗎?", + "permalink.show_dialog_warn.join": "加入", + "permalink.show_dialog_warn.title": "加入私人頻道", + "persistent_notifications.confirm.cancel": "取消", + "persistent_notifications.confirm.description": "@mentioned 接收者每{interval, plural, one {分鐘} other { {interval} 分鐘}}將收到通知,直到勾選已讀或回覆訊息。", + "persistent_notifications.confirm.send": "傳送", + "persistent_notifications.confirm.title": "傳送持續性通知", + "persistent_notifications.dm_channel.description": "{username} 將每隔 {interval, plural, one {分鐘} other {{interval} 分鐘}} 收到一次通知,直到他們確認或回覆訊息為止。", + "persistent_notifications.error.max_recipients.description": "您可以傳送持續性通知給最多 {max} 位接收者。您的訊息將提及 {count} 位接收者,請調整提及對象才能傳送訊息。", + "persistent_notifications.error.max_recipients.title": "接收者過多", + "persistent_notifications.error.no_mentions.description": "您的訊息沒有提及的接收者。您必須增加提及對象才能傳送持續性通知。", + "persistent_notifications.error.no_mentions.title": "必須透過 @mention 提及接收者", + "persistent_notifications.error.okay": "確定", + "persistent_notifications.error.special_mentions": "無法使用 @channel、@all 或 @here 來提及持續性通知的接收者。", + "pinned_messages.empty.paragraph": "要釘選重要訊息,對訊息長按並選擇「釘選至頻道」。此頻道的所有人都將能看到釘選的訊息。", + "pinned_messages.empty.title": "尚無釘選的訊息", + "plus_menu.browse_channels.title": "瀏覽頻道", + "plus_menu.create_new_channel.title": "建立新頻道", + "plus_menu.invite_people_to_team.title": "邀請人們加入團隊", + "plus_menu.open_direct_message.title": "開啟私人訊息", + "post.options.title": "選項", + "post.reactions.title": "回應", + "postList.scrollToBottom.newMessages": "新訊息", + "postList.scrollToBottom.newReplies": "新回覆", + "post_body.check_for_out_of_channel_groups_mentions.message": "沒有因這個提及而收到通知,因為他們不在頻道中。他們也不是連結群組的成員。", + "post_body.check_for_out_of_channel_mentions.link.and": " 與 ", "post_body.check_for_out_of_channel_mentions.link.private": "將他們加進此私人頻道", "post_body.check_for_out_of_channel_mentions.link.public": "將他們加進此頻道", - "post_body.check_for_out_of_channel_mentions.message.multiple": "被提及但是不在此頻道。請問是否要", - "post_body.check_for_out_of_channel_mentions.message.one": "被提及但是不在此頻道。請問是否要", + "post_body.check_for_out_of_channel_mentions.message.multiple": "被提及但是不在此頻道。請問是否要 ", + "post_body.check_for_out_of_channel_mentions.message.one": "被提及但是不在此頻道。請問是否要 ", "post_body.check_for_out_of_channel_mentions.message_last": "?他們將可以瀏覽所有的訊息紀錄。", - "post_body.commentedOn": " 已在{name}的訊息上註記:", - "post_body.deleted": "(訊息已刪除)", - "post_info.auto_responder": "", - "post_info.bot": "", + "post_body.commentedOn": "已在 {name}{apostrophe} 的訊息上留言: ", + "post_body.deleted": "(訊息已刪除)", + "post_info.auto_responder": "自動回覆", + "post_info.bot": "機器人", "post_info.del": "刪除", "post_info.edit": "編輯", - "post_info.guest": "", + "post_info.guest": "訪客", "post_info.system": "系統", - "post_message_view.edited": "(被編輯過)", - "post_priority.label.important": "", - "post_priority.label.urgent": "", - "post_priority.picker.beta": "", - "post_priority.picker.label.important": "", - "post_priority.picker.label.standard": "", - "post_priority.picker.label.urgent": "", - "post_priority.picker.title": "", + "post_message_view.edited": "(已編輯)", + "post_priority.button.acknowledge": "已讀", + "post_priority.label.important": "重要", + "post_priority.label.urgent": "緊急", + "post_priority.picker.apply": "套用", + "post_priority.picker.beta": "測試版", + "post_priority.picker.cancel": "取消", + "post_priority.picker.label.important": "重要", + "post_priority.picker.label.persistent_notifications": "傳送持續性通知", + "post_priority.picker.label.persistent_notifications.description": "接收者每{interval, plural, one {分鐘} other {{interval} 分鐘}} 將收到通知,直到勾選已讀或回覆。", + "post_priority.picker.label.request_ack": "要求勾選已讀", + "post_priority.picker.label.request_ack.description": "您的訊息將出現已讀按鈕", + "post_priority.picker.label.standard": "標準", + "post_priority.picker.label.urgent": "緊急", + "post_priority.picker.title": "訊息優先度", "posts_view.newMsg": "新訊息", - "public_link_copied": "", - "rate.button.needs_work": "", - "rate.button.yes": "", - "rate.dont_ask_again": "", - "rate.error.text": "", - "rate.error.title": "", - "rate.subtitle": "", - "rate.title": "", - "saved_messages.empty.paragraph": "", - "saved_messages.empty.title": "", - "screen.mentions.subtitle": "", - "screen.mentions.title": "", - "screen.saved_messages.subtitle": "", - "screen.saved_messages.title": "", - "screen.search.header.files": "", - "screen.search.header.messages": "", - "screen.search.modifier.header": "", - "screen.search.placeholder": "", - "screen.search.results.file_options.copy_link": "", - "screen.search.results.file_options.download": "", - "screen.search.results.file_options.open_in_channel": "", - "screen.search.results.filter.all_file_types": "", - "screen.search.results.filter.audio": "", - "screen.search.results.filter.code": "", - "screen.search.results.filter.documents": "", - "screen.search.results.filter.images": "", - "screen.search.results.filter.presentations": "", - "screen.search.results.filter.spreadsheets": "", - "screen.search.results.filter.title": "", - "screen.search.results.filter.videos": "", - "screen.search.title": "", - "screens.channel_edit": "", - "screens.channel_edit_header": "", - "screens.channel_info": "", - "screens.channel_info.dm": "", - "screens.channel_info.gm": "", + "public_link_copied": "已複製連結至剪貼簿", + "rate.button.needs_work": "還要加油", + "rate.button.yes": "超讚!", + "rate.dont_ask_again": "不要再詢問", + "rate.error.text": "開啟回饋對話方塊時發生錯誤。", + "rate.error.title": "錯誤", + "rate.subtitle": "讓我們知道您的想法。", + "rate.title": "喜歡 Mattermost 嗎?", + "requested_ack.title": "要求勾選已讀", + "saved_messages.empty.paragraph": "長按訊息之後,選擇選單中的「儲存」,即可將訊息收藏下來稍後再看。儲存的訊息只有您看得到。", + "saved_messages.empty.title": "尚無儲存的訊息", + "screen.channel_files.header.recent_files": "最近使用的檔案", + "screen.channel_files.results.filter.title": "依檔案類型篩選", + "screen.mentions.subtitle": "您被提及的訊息", + "screen.mentions.title": "最近的提及", + "screen.saved_messages.subtitle": "所有儲存待追蹤的訊息", + "screen.saved_messages.title": "儲存的訊息", + "screen.search.header.files": "檔案", + "screen.search.header.messages": "訊息", + "screen.search.modifier.header": "搜尋選項", + "screen.search.placeholder": "搜尋訊息及檔案", + "screen.search.results.file_options.copy_link": "複製連結", + "screen.search.results.file_options.download": "下載", + "screen.search.results.file_options.open_in_channel": "在頻道中開啟", + "screen.search.results.filter.all_file_types": "所有檔案類型", + "screen.search.results.filter.audio": "音訊", + "screen.search.results.filter.code": "程式碼", + "screen.search.results.filter.documents": "文件", + "screen.search.results.filter.images": "圖片", + "screen.search.results.filter.presentations": "簡報", + "screen.search.results.filter.spreadsheets": "試算表", + "screen.search.results.filter.title": "依檔案類型篩選", + "screen.search.results.filter.videos": "影片", + "screen.search.title": "搜尋", + "screens.channel_bookmark_add": "新增書籤", + "screens.channel_bookmark_edit": "編輯書籤", + "screens.channel_edit": "編輯頻道", + "screens.channel_edit_header": "編輯頻道標題", + "screens.channel_info": "頻道資訊", + "screens.channel_info.dm": "私人訊息資訊", + "screens.channel_info.gm": "群組訊息資訊", "search_bar.search": "搜尋", - "search_bar.search.placeholder": "", - "select_team.description": "", - "select_team.no_team.description": "", - "select_team.no_team.title": "", - "select_team.title": "", - "server.logout.alert_description": "", - "server.logout.alert_title": "", - "server.remove.alert_description": "", - "server.remove.alert_title": "", - "server.tutorial.swipe": "", - "server.websocket.unreachable": "", - "server_list.push_proxy_error": "", - "server_list.push_proxy_unknown": "", - "server_upgrade.alert_description": "", - "server_upgrade.dismiss": "", - "server_upgrade.learn_more": "", - "servers.create_button": "", - "servers.default": "", - "servers.edit": "", - "servers.login": "", - "servers.logout": "", - "servers.remove": "", - "settings.about": "", - "settings.about.copyright": "", - "settings.about.database": "", - "settings.about.database.schema": "", - "settings.about.licensed": "", - "settings.about.powered_by": "", - "settings.about.server.version.value": "", - "settings.advanced.cancel": "", - "settings.advanced.delete": "", - "settings.advanced.delete_data": "", - "settings.advanced.delete_message.confirmation": "", - "settings.advanced_settings": "", - "settings.display": "", - "settings.link.error.text": "", - "settings.link.error.title": "", - "settings.notice_mobile_link": "", - "settings.notice_platform_link": "", - "settings.notice_text": "", - "settings.notifications": "", - "settings.save": "", - "settings_display.clock.mz": "", - "settings_display.clock.mz.desc": "", - "settings_display.clock.normal.desc": "", - "settings_display.clock.standard": "", - "settings_display.crt.desc": "", - "settings_display.crt.label": "", - "settings_display.custom_theme": "", - "settings_display.timezone.automatically": "", - "settings_display.timezone.manual": "", - "settings_display.timezone.off": "", - "settings_display.timezone.select": "", - "share_extension.channel_error": "", - "share_extension.channel_label": "", - "share_extension.count_limit": "", - "share_extension.file_limit.multiple": "", - "share_extension.file_limit.single": "", - "share_extension.max_resolution": "", - "share_extension.message": "", - "share_extension.multiple_label": "", - "share_extension.server_label": "", - "share_extension.servers_screen.title": "", - "share_extension.share_screen.title": "", - "share_extension.upload_disabled": "", - "share_feedback.button.no": "", - "share_feedback.button.yes": "", - "share_feedback.subtitle": "", - "share_feedback.title": "", - "skintone_selector.tooltip.description": "", - "skintone_selector.tooltip.title": "", - "smobile.search.recent_title": "", - "snack.bar.favorited.channel": "", - "snack.bar.link.copied": "", - "snack.bar.message.copied": "", - "snack.bar.mute.channel": "", - "snack.bar.remove.user": "", - "snack.bar.undo": "", - "snack.bar.unfavorite.channel": "", - "snack.bar.unmute.channel": "", + "search_bar.search.placeholder": "搜尋時區", + "select_team.description": "您還不是任何團隊的成員,選擇下方任一團隊加入討論。", + "select_team.no_team.description": "欲加入團隊,請向團隊管理員取得邀請,或建立您自己的團隊。您也可以看看信件匣中是否已有邀請函。", + "select_team.no_team.title": "沒有可供加入的團隊", + "select_team.title": "選取團隊", + "server.invalid.certificate.description": "此伺服器的憑證無效。\n您可能連線至至假冒「{hostname}」的伺服器,這可能會讓您的機密資訊面臨風險。", + "server.invalid.certificate.title": "無效的 SSL 憑證", + "server.invalid.pinning.title": "無效的已固定 SSL 憑證", + "server.logout.alert_description": "所有關聯的資料將被移除", + "server.logout.alert_title": "確定要登出 {displayName} 嗎?", + "server.remove.alert_description": "這會從您的伺服器清單將其移除。所有關聯的資料將被移除", + "server.remove.alert_title": "確定要移除 {displayName} 嗎?", + "server.tutorial.swipe": "對伺服器向左滑以檢視更多動作", + "server.websocket.unreachable": "無法連線至伺服器。", + "server_list.push_proxy_error": "由於伺服器設定無法接收通知。請聯絡您的系統管理員。", + "server_list.push_proxy_unknown": "由於伺服器設定無法接收通知。登出再登入一次來重試。", + "server_upgrade.alert_description": "您的伺服器 {serverDisplayName} 正在執行不支援的伺服器版本。使用者可能會遇到相容性問題,可能導致當機或讓應用程式核心功能異常。需要升級伺服器版本至 {supportedServerVersion} 或更新版本。", + "server_upgrade.dismiss": "忽略", + "server_upgrade.learn_more": "了解更多", + "servers.create_button": "新增伺服器", + "servers.default": "預設伺服器", + "servers.edit": "編輯", + "servers.login": "登入", + "servers.logout": "登出", + "servers.remove": "移除", + "settings.about": "關於 {appTitle}", + "settings.about.app.version": "應用程式版本:{version}(組建 {number})", + "settings.about.app.version.title": "應用程式版本:", + "settings.about.app.version.value": "{version}(組建 {number})", + "settings.about.button.copyInfo": "複製資訊", + "settings.about.copyright": "版權所有 2015-{currentYear} Mattermost, Inc. 保留所有權利", + "settings.about.database": "資料庫:{driverName}", + "settings.about.database.schema": "資料庫結構描述版本:{version}", + "settings.about.database.schema.title": "資料庫結構描述版本:", + "settings.about.database.title": "資料庫:", + "settings.about.licensed": "授權予:{company}", + "settings.about.powered_by": "{site} 威力本源 Mattermost", + "settings.about.server.version": "伺服器版本:{version}(組建 {buildNumber})", + "settings.about.server.version.noBuild": "伺服器版本:{version}", + "settings.about.server.version.title": "伺服器版本:", + "settings.about.server.version.value": "{version}(組建{buildNumber})", + "settings.advanced.cancel": "取消", + "settings.advanced.delete": "刪除", + "settings.advanced.delete_data": "刪除本機檔案", + "settings.advanced.delete_message.confirmation": "\n此動作將刪除從此伺服器上透過本應用程式下載的所有檔案。請確認是否繼續。\n", + "settings.advanced_settings": "進階設定", + "settings.display": "顯示", + "settings.link.error.text": "無法開啟連結。", + "settings.link.error.title": "錯誤", + "settings.notice_mobile_link": "行動裝置應用程式", + "settings.notice_platform_link": "伺服器", + "settings.notice_text": "Mattermost 因我們的 {platform} 及 {mobile} 中所使用的開放源碼軟體才得以成真。", + "settings.notifications": "通知", + "settings.save": "儲存", + "settings_display.clock.mz": "24 小時時鐘", + "settings_display.clock.mz.desc": "範例:16:00", + "settings_display.clock.normal.desc": "範例:4:00 PM", + "settings_display.clock.standard": "12 小時時鐘", + "settings_display.crt.desc": "啟用時,回覆訊息不會顯示於頻道,且您可透過「討論串」畫面中追蹤的討論串接收通知。", + "settings_display.crt.label": "收合回覆討論串", + "settings_display.custom_theme": "自訂主題", + "settings_display.timezone.automatically": "自動設定", + "settings_display.timezone.manual": "變更時區", + "settings_display.timezone.off": "關閉", + "settings_display.timezone.select": "選取時區", + "share_extension.channel_error": "您尚未成為選定伺服器的任何團隊成員。選擇其他伺服器或開啟 Mattermost 來加入團隊。", + "share_extension.channel_label": "頻道", + "share_extension.channels_screen.title": "選取頻道", + "share_extension.count_limit": "您在此伺服器上只能分享{count, number} {count, plural, one {個檔案} other {個檔案}}", + "share_extension.error_screen.description": "試圖分享內容至 {applicationName} 時發生錯誤。", + "share_extension.error_screen.label": "發生錯誤", + "share_extension.error_screen.reason": "原因:{reason}", + "share_extension.file_limit.multiple": "每個檔案必須小於 {size}", + "share_extension.file_limit.single": "檔案必須小於 {size}", + "share_extension.max_resolution": "圖片超過最大尺寸 7680 x 4320 px", + "share_extension.message": "輸入訊息(選填)", + "share_extension.multiple_label": "{count, number}個附件", + "share_extension.server_label": "伺服器", + "share_extension.servers_screen.title": "選取伺服器", + "share_extension.share_screen.title": "分享至 {applicationName}", + "share_extension.upload_disabled": "選定的伺服器已停用檔案上傳", + "share_feedback.button.no": "不用了,謝謝", + "share_feedback.button.yes": "是", + "share_feedback.subtitle": "我們衷心期盼聆聽您的意見,以提供更好的體驗。", + "share_feedback.title": "想要分享您的意見嗎?", + "skintone_selector.tooltip.description": "您現在可以為表情符號選擇偏好的膚色色調。", + "skintone_selector.tooltip.title": "選擇您的預設膚色色調", + "smobile.search.recent_title": "{teamName} 中最近的搜尋", + "snack.bar.channel.members.added": "已加入{numMembers, number} {numMembers, plural, one {位成員} other {位成員}}", + "snack.bar.code.copied": "將程式碼複製到剪貼簿", + "snack.bar.favorited.channel": "已將此頻道加入最愛", + "snack.bar.following.thread": "已追蹤討論串", + "snack.bar.info.copied": "已複製資訊至剪貼簿", + "snack.bar.link.copied": "已複製連結至剪貼簿", + "snack.bar.message.copied": "已複製文字至剪貼簿", + "snack.bar.mute.channel": "此頻道已靜音", + "snack.bar.remove.user": "已從頻道移除一位成員", + "snack.bar.text.copied": "已複製至剪貼簿", + "snack.bar.undo": "復原", + "snack.bar.unfavorite.channel": "此頻道已移出最愛", + "snack.bar.unfollow.thread": "已取消追蹤討論串", + "snack.bar.unmute.channel": "此頻道已被解除靜音", "status_dropdown.set_away": "離開", "status_dropdown.set_dnd": "請勿打擾", "status_dropdown.set_offline": "離線", "status_dropdown.set_online": "上線", - "status_dropdown.set_ooo": "", + "status_dropdown.set_ooo": "不在辦公室", "suggestion.mention.all": "通知頻道全員", "suggestion.mention.channel": "通知頻道全員", "suggestion.mention.channels": "我的頻道", "suggestion.mention.groups": "群組提及", - "suggestion.mention.here": "通知頻道全體在線成員", + "suggestion.mention.here": "通知此頻道中,所有上線的成員", "suggestion.mention.morechannels": "其他頻道", + "suggestion.mention.nonmembers": "不在頻道中", "suggestion.mention.special": "特別提及", - "suggestion.search.direct": "直接傳訊", + "suggestion.mention.users": "使用者", + "suggestion.search.direct": "私人訊息", "suggestion.search.private": "私人頻道", "suggestion.search.public": "公開頻道", - "team_list.no_other_teams.description": "", - "team_list.no_other_teams.title": "", - "terms_of_service.acceptButton": "", - "terms_of_service.alert_cancel": "", - "terms_of_service.alert_retry": "", - "terms_of_service.api_error": "無法完成請求。如果問題持續存在,請聯繫系統管理員。", + "system_notice.dont_show": "不再顯示", + "system_notice.remind_me": "稍後提醒我", + "system_notice.title.gm_as_dm": "群組訊息的更新", + "system_noticy.body.gm_as_dm": "現在起,您會收到群組傳訊中所有活動的通知,以及每個新訊息的通知徽章。\n\n您可以自行針對每個群組的訊息,調整偏好。", + "team_list.no_other_teams.description": "欲加入其他團隊,請向團隊管理者取得邀請,或建立您自己的團隊。", + "team_list.no_other_teams.title": "沒有額外可加入的團隊", + "terms_of_service.acceptButton": "接受", + "terms_of_service.alert_cancel": "取消", + "terms_of_service.alert_retry": "重試", + "terms_of_service.api_error": "無法完成請求。若此問題持續發生,請聯絡系統管理員。", "terms_of_service.decline": "拒絕", "terms_of_service.error.description": "無法從伺服器取得服務條款。", "terms_of_service.error.logout": "登出", "terms_of_service.error.retry": "重試", "terms_of_service.error.title": "無法取得服務條款。", "terms_of_service.terms_declined.ok": "確定", - "terms_of_service.terms_declined.text": "您必須接受服務條款才能存取此伺服器。請聯繫系統管理員以獲取更多詳細資訊。您將被登出。請重新登入以接受服務條款。", + "terms_of_service.terms_declined.text": "您必須接受服務條款才能存取此伺服器。請聯絡系統管理員以取得更多詳細資訊。您將被登出。請重新登入以接受服務條款。", "terms_of_service.terms_declined.title": "您必須接受服務條款", "terms_of_service.title": "服務條款", "thread.header.thread": "討論串", "thread.header.thread_in": "在 {channelName} 中", - "thread.loadingReplies": "正在載入回覆...", + "thread.loadingReplies": "正在載入回覆…", "thread.noReplies": "尚無回覆", - "thread.options.title": "討論串操作", - "thread.repliesCount": "", + "thread.options.title": "討論串動作", + "thread.repliesCount": "{repliesCount, number}則回覆", "threads": "討論串", "threads.deleted": "原始訊息已刪除", - "threads.end_of_list.subtitle": "如果您正在尋找較舊的對話,建議嘗試進行搜索", + "threads.end_of_list.subtitle": "如果您正在尋找較舊的對話,建議嘗試搜尋", "threads.end_of_list.title": "這是清單的結尾!", "threads.follow": "追蹤", "threads.followMessage": "追蹤訊息", "threads.followThread": "追蹤討論串", "threads.following": "已追蹤", - "threads.newReplies": "", - "threads.replies": "", - "threads.unfollowMessage": "取消關注訊息", - "threads.unfollowThread": "", - "unreads.empty.paragraph": "", - "unreads.empty.show_all": "", - "unreads.empty.title": "", - "unsupported_server.message": "", - "unsupported_server.title": "", - "user.edit_profile.email.auth_service": "", - "user.edit_profile.email.web_client": "", - "user.edit_profile.profile_photo.change_photo": "", + "threads.newReplies": "{count} 則 {count, plural, one {回覆} other {回覆}}", + "threads.replies": "{count} {count, plural, one {則回覆} other {則回覆}}", + "threads.unfollowMessage": "取消追蹤訊息", + "threads.unfollowThread": "取消追蹤討論串", + "unreads.empty.paragraph": "關閉未讀過濾器以顯示您所有的頻道。", + "unreads.empty.show_all": "顯示全部", + "unreads.empty.title": "沒有其他未讀訊息", + "unsupported_server.message": "您的伺服器 {serverDisplayName} 正在執行不支援的伺服器版本。您可能會遇到相容性問題,以至於應用程式當機或造成核心功能異常的嚴重臭蟲。請聯絡您的系統管理員來升級 Mattermost 伺服器。", + "unsupported_server.title": "不支援的伺服器版本", + "user.edit_profile.email.auth_service": "透過 {service} 登入。無法更新電子郵件。用於傳送通知的電子郵件地址為 {email}。", + "user.edit_profile.email.web_client": "必須使用網頁版用戶端或桌面應用程式才能更新電子郵件地址。", + "user.edit_profile.profile_photo.change_photo": "變更個人檔案圖片", "user.settings.general.email": "電子郵件", - "user.settings.general.field_handled_externally": "", + "user.settings.general.field_handled_externally": "下方有些欄位由您的登入提供者處理。若想變更,請透過您的登入提供者來調整。", "user.settings.general.firstName": "名字", "user.settings.general.lastName": "姓氏", - "user.settings.general.nickname": "匿稱", + "user.settings.general.nickname": "暱稱", "user.settings.general.position": "職位", "user.settings.general.username": "使用者名稱", - "user.settings.notifications.email_threads.description": "", - "user.tutorial.long_press": "", - "user_profile.custom_status": "", - "user_status.away": "", - "user_status.dnd": "", - "user_status.offline": "", - "user_status.online": "", - "user_status.title": "", - "video.download": "", - "video.download_description": "", - "video.failed_description": "", - "your.servers": "" + "user.settings.notifications.email_threads.description": "通知我關於追蹤的討論串的所有回覆", + "user.tutorial.long_press": "長按項目以檢視使用者的個人檔案", + "user_profile.custom_status": "自訂狀態", + "user_status.away": "離開", + "user_status.dnd": "請勿打擾", + "user_status.offline": "離線", + "user_status.online": "線上", + "user_status.title": "狀態", + "video.download": "下載影片", + "video.download_description": "必須下載此影片才能播放。", + "video.failed_description": "嘗試播放影片時發生錯誤。", + "your.servers": "您的伺服器" } diff --git a/assets/base/images/Icon_EntraID.png b/assets/base/images/Icon_EntraID.png new file mode 100644 index 00000000000..87732bcbd2e Binary files /dev/null and b/assets/base/images/Icon_EntraID.png differ diff --git a/assets/base/images/Icon_EntraID@2x.png b/assets/base/images/Icon_EntraID@2x.png new file mode 100644 index 00000000000..a0d68a601c0 Binary files /dev/null and b/assets/base/images/Icon_EntraID@2x.png differ diff --git a/assets/base/images/Icon_EntraID@3x.png b/assets/base/images/Icon_EntraID@3x.png new file mode 100644 index 00000000000..0e0e149d16d Binary files /dev/null and b/assets/base/images/Icon_EntraID@3x.png differ diff --git a/assets/base/images/Icon_Office.png b/assets/base/images/Icon_Office.png deleted file mode 100644 index f5b90ab556f..00000000000 Binary files a/assets/base/images/Icon_Office.png and /dev/null differ diff --git a/assets/base/images/Icon_Office@2x.png b/assets/base/images/Icon_Office@2x.png deleted file mode 100644 index 28f8e423781..00000000000 Binary files a/assets/base/images/Icon_Office@2x.png and /dev/null differ diff --git a/assets/base/images/Icon_Office@3x.png b/assets/base/images/Icon_Office@3x.png deleted file mode 100644 index 18db79a3743..00000000000 Binary files a/assets/base/images/Icon_Office@3x.png and /dev/null differ diff --git a/assets/certs/.gitignore b/assets/certs/.gitignore new file mode 100644 index 00000000000..86d0cb2726c --- /dev/null +++ b/assets/certs/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore \ No newline at end of file diff --git a/assets/sounds/calls_calm.mp3 b/assets/sounds/calls_calm.mp3 new file mode 100644 index 00000000000..e4c217cd87d Binary files /dev/null and b/assets/sounds/calls_calm.mp3 differ diff --git a/assets/sounds/calls_cheerful.mp3 b/assets/sounds/calls_cheerful.mp3 new file mode 100644 index 00000000000..f029ee213ae Binary files /dev/null and b/assets/sounds/calls_cheerful.mp3 differ diff --git a/assets/sounds/calls_dynamic.mp3 b/assets/sounds/calls_dynamic.mp3 new file mode 100644 index 00000000000..8b7a10d4b63 Binary files /dev/null and b/assets/sounds/calls_dynamic.mp3 differ diff --git a/assets/sounds/calls_urgent.mp3 b/assets/sounds/calls_urgent.mp3 new file mode 100644 index 00000000000..4e1e31208b0 Binary files /dev/null and b/assets/sounds/calls_urgent.mp3 differ diff --git a/babel.config.js b/babel.config.js index a2d07f4da8a..5d0fa481782 100644 --- a/babel.config.js +++ b/babel.config.js @@ -28,7 +28,6 @@ module.exports = { '@i18n': './app/i18n', '@init': './app/init', '@managers': './app/managers', - '@notifications': './app/notifications', '@queries': './app/queries', '@screens': './app/screens', '@share': './share_extension', diff --git a/build/notice-file/config.yaml b/build/notice-file/config.yaml index 993cb19f172..bb396672831 100644 --- a/build/notice-file/config.yaml +++ b/build/notice-file/config.yaml @@ -8,7 +8,12 @@ reviewers: - "enahum" search: - "package.json" -dependencies: [] -devDependencies: [] +additionalDependencies: [] +includeDevDependencies: false +ignoreDependencies: +- "@mattermost/hardware-keyboard" +- "@mattermost/rnshare" +- "@mattermost/rnutils" +- "@mattermost/keyboard-tracker" ... diff --git a/detox/.detoxrc.json b/detox/.detoxrc.json index 5a03db58c8f..d57c9abda45 100644 --- a/detox/.detoxrc.json +++ b/detox/.detoxrc.json @@ -8,7 +8,7 @@ "apps": { "ios.debug": { "type": "ios.app", - "binaryPath": "../ios/Build/Products/Debug-iphonesimulator/Mattermost.app" + "binaryPath": "../mobile-artifacts/Mattermost.app" }, "ios.release": { "type": "ios.app", @@ -30,7 +30,8 @@ "ios.simulator": { "type": "ios.simulator", "device": { - "type": "iPhone 14" + "type": "__DEVICE_TYPE__", + "os": "__DEVICE_OS__" } }, "android.emulator": { diff --git a/detox/e2e/support/server_api/common.ts b/detox/e2e/support/server_api/common.ts index d4060eec1a5..ff19fb435dc 100644 --- a/detox/e2e/support/server_api/common.ts +++ b/detox/e2e/support/server_api/common.ts @@ -12,7 +12,7 @@ export const getCookiesFromConfig = (config: AxiosRequestConfig) => { let mmAuthToken = ''; let mmUserId = ''; let mmCsrf = ''; - config.jar?.toJSON().cookies.forEach((cookie: any) => { + config.jar?.toJSON()?.cookies.forEach((cookie: any) => { if (cookie.key === 'MMAUTHTOKEN') { mmAuthToken = cookie.value; } else if (cookie.key === 'MMUSERID') { @@ -32,7 +32,7 @@ export const getCookiesFromConfig = (config: AxiosRequestConfig) => { export const getResponseFromError = (err: any) => { const {response} = err; if (!response) { - const message = `No response from server at "${err.config.baseURL}". + const message = `No response from server at "${err}". If testing against a server other than the default local instance, you may set the server URL via "SITE_URL" environment variable. `; diff --git a/detox/e2e/support/server_api/user.ts b/detox/e2e/support/server_api/user.ts index 37c70c31aaf..afd1d046d32 100644 --- a/detox/e2e/support/server_api/user.ts +++ b/detox/e2e/support/server_api/user.ts @@ -48,7 +48,7 @@ export const apiCreateUser = async (baseUrl: string, {prefix = 'user', user = nu newUser, ); - return {user: {...response.data, password: newUser.password}}; + return {user: {...response.data, newUser}}; } catch (err) { return getResponseFromError(err); } diff --git a/detox/e2e/support/test_config.ts b/detox/e2e/support/test_config.ts index 54b087db837..aee64cbf02a 100644 --- a/detox/e2e/support/test_config.ts +++ b/detox/e2e/support/test_config.ts @@ -1,12 +1,12 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -export const serverOneUrl = process.env.SITE_1_URL || (process.env.IOS === 'true' ? 'http://127.0.0.1:8065' : 'http://10.0.2.2:8065'); -export const siteOneUrl = process.env.SITE_1_URL || 'http://127.0.0.1:8065'; -export const serverTwoUrl = process.env.SITE_2_URL || 'https://mobile02.test.mattermost.cloud'; -export const siteTwoUrl = process.env.SITE_2_URL || 'https://mobile02.test.mattermost.cloud'; -export const serverThreeUrl = process.env.SITE_3_URL || 'https://mobile03.test.mattermost.cloud'; -export const siteThreeUrl = process.env.SITE_3_URL || 'https://mobile03.test.mattermost.cloud'; +export const serverOneUrl = process.env.SITE_1_URL || (process.env.IOS === 'true' ? 'http://localhost:8065' : 'http://10.0.2.2:8065'); +export const siteOneUrl = process.env.SITE_1_URL || 'http://localhost:8065'; +export const serverTwoUrl = process.env.SITE_2_URL || 'http://localhost:8065'; +export const siteTwoUrl = process.env.SITE_2_URL || 'http://localhost:8065'; +export const serverThreeUrl = process.env.SITE_3_URL || 'http://localhost:8065'; +export const siteThreeUrl = process.env.SITE_3_URL || 'http://localhost:8065'; export const smtpUrl = process.env.SMTP_URL || 'http://127.0.0.1:9001'; export const adminEmail = process.env.ADMIN_EMAIL || 'sysadmin@sample.mattermost.com'; export const adminUsername = process.env.ADMIN_USERNAME || 'sysadmin'; diff --git a/detox/e2e/support/ui/screen/channel.ts b/detox/e2e/support/ui/screen/channel.ts index 31e430ea44c..5581de9e9b9 100644 --- a/detox/e2e/support/ui/screen/channel.ts +++ b/detox/e2e/support/ui/screen/channel.ts @@ -22,6 +22,7 @@ import {expect} from 'detox'; class ChannelScreen { testID = { + archievedCloseChannelButton: 'channel.post_draft.archived.close_channel.button', channelScreenPrefix: 'channel.', channelScreen: 'channel.screen', channelQuickActionsButton: 'channel_header.channel_quick_actions.button', @@ -43,6 +44,7 @@ class ChannelScreen { toastMessage: 'toast.message', }; + archievedCloseChannelButton = element(by.id(this.testID.archievedCloseChannelButton)); channelScreen = element(by.id(this.testID.channelScreen)); channelQuickActionsButton = element(by.id(this.testID.channelQuickActionsButton)); favoriteQuickAction = element(by.id(this.testID.favoriteQuickAction)); @@ -172,6 +174,7 @@ class ChannelScreen { postMessage = async (message: string) => { // # Post message await this.postInput.tap(); + await this.postInput.clearText(); await this.postInput.replaceText(message); await this.tapSendButton(); }; diff --git a/detox/e2e/support/ui/screen/channel_info.ts b/detox/e2e/support/ui/screen/channel_info.ts index a4ca3adf67f..a11abcde689 100644 --- a/detox/e2e/support/ui/screen/channel_info.ts +++ b/detox/e2e/support/ui/screen/channel_info.ts @@ -139,6 +139,8 @@ class ChannelInfoScreen { }; convertToPrivateChannel = async (channelDisplayName: string, {confirm = true} = {}) => { + await this.scrollView.tap({x: 1, y: 1}); + await this.scrollView.scroll(100, 'down'); await waitFor(this.convertPrivateOption).toExist().withTimeout(timeouts.TWO_SEC); await this.convertPrivateOption.tap({x: 1, y: 1}); const { @@ -165,6 +167,8 @@ class ChannelInfoScreen { }; leaveChannel = async ({confirm = true} = {}) => { + await this.scrollView.tap({x: 1, y: 1}); + await this.scrollView.scroll(200, 'down'); await waitFor(this.leaveChannelOption).toExist().withTimeout(timeouts.TWO_SEC); if (isAndroid()) { await this.scrollView.scrollTo('bottom'); diff --git a/detox/e2e/support/ui/screen/create_direct_message.ts b/detox/e2e/support/ui/screen/create_direct_message.ts index 13e813aa23d..56c68a61375 100644 --- a/detox/e2e/support/ui/screen/create_direct_message.ts +++ b/detox/e2e/support/ui/screen/create_direct_message.ts @@ -46,7 +46,7 @@ class CreateDirectMessageScreen { }; getUserItem = (userId: string) => { - return element(by.id(`${this.testID.userItemPrefix}${userId}`)); + return element(by.id(`${this.testID.userItemPrefix}${userId}.${userId}`)); }; getUserItemProfilePicture = (userId: string) => { @@ -54,7 +54,7 @@ class CreateDirectMessageScreen { }; getUserItemDisplayName = (userId: string) => { - return element(by.id(`${this.testID.userItemPrefix}${userId}.display_name`)); + return element(by.id(`${this.testID.userItemPrefix}${userId}.${userId}.display_name`)); }; toBeVisible = async () => { diff --git a/detox/e2e/support/ui/screen/create_or_edit_channel.ts b/detox/e2e/support/ui/screen/create_or_edit_channel.ts index 70f5dc9de4e..d8f6fb1fd89 100644 --- a/detox/e2e/support/ui/screen/create_or_edit_channel.ts +++ b/detox/e2e/support/ui/screen/create_or_edit_channel.ts @@ -59,6 +59,8 @@ class CreateOrEditChannelScreen { openEditChannel = async () => { // # Open edit channel screen + await ChannelInfoScreen.scrollView.tap({x: 1, y: 1}); + await ChannelInfoScreen.scrollView.scroll(100, 'down'); await ChannelInfoScreen.editChannelOption.tap(); return this.toBeVisible(); diff --git a/detox/e2e/support/ui/screen/invite.ts b/detox/e2e/support/ui/screen/invite.ts index 3962618fbf9..95fa8827232 100644 --- a/detox/e2e/support/ui/screen/invite.ts +++ b/detox/e2e/support/ui/screen/invite.ts @@ -100,7 +100,7 @@ class InviteScreen { }; getSummaryReportUserItemText = (id: string) => { - return element(by.id(`${this.testID.summaryReportUserItemPrefix}.${id}.username`)); + return element(by.id(`${this.testID.summaryReportUserItemPrefix}.${id}.display_name`)); }; toBeVisible = async () => { diff --git a/detox/e2e/support/ui/screen/login.ts b/detox/e2e/support/ui/screen/login.ts index 6a63024d995..fd663837d29 100644 --- a/detox/e2e/support/ui/screen/login.ts +++ b/detox/e2e/support/ui/screen/login.ts @@ -60,9 +60,17 @@ class LoginScreen { login = async (user: any = {}) => { await this.toBeVisible(); - await this.usernameInput.replaceText(user.username); - await this.passwordInput.replaceText(user.password); - await this.signinButton.tap(); + await this.usernameInput.typeText(`${user.newUser.email}\n`); + await this.passwordInput.typeText(`${user.newUser.password}\n`); + + await wait(timeouts.FOUR_SEC); + }; + + loginAsAdmin = async (user: any = {}) => { + await this.toBeVisible(); + await this.usernameInput.typeText(user.username); + await this.passwordInput.typeText(`${user.password}\n`); + await wait(timeouts.ONE_SEC); }; } diff --git a/detox/e2e/support/ui/screen/server.ts b/detox/e2e/support/ui/screen/server.ts index 4bb74c2caf4..71e5f9cd74a 100644 --- a/detox/e2e/support/ui/screen/server.ts +++ b/detox/e2e/support/ui/screen/server.ts @@ -20,6 +20,8 @@ class ServerScreen { displayHelp: 'server_form.display_help', connectButton: 'server_form.connect.button', connectButtonDisabled: 'server_form.connect.button.disabled', + usernameInput: 'login_form.username.input', + usernameInputError: 'login_form.username.input.error', }; serverScreen = element(by.id(this.testID.serverScreen)); @@ -35,6 +37,7 @@ class ServerScreen { displayHelp = element(by.id(this.testID.displayHelp)); connectButton = element(by.id(this.testID.connectButton)); connectButtonDisabled = element(by.id(this.testID.connectButtonDisabled)); + usernameInput = element(by.id(this.testID.usernameInput)); toBeVisible = async () => { await waitFor(this.serverScreen).toExist().withTimeout(timeouts.TEN_SEC); @@ -53,13 +56,18 @@ class ServerScreen { } if (isIos()) { await this.tapConnectButton(); - - if (serverUrl.includes('127.0.0.1')) { - // # Tap alert okay button - await waitFor(Alert.okayButton).toExist().withTimeout(timeouts.TEN_SEC); - await Alert.okayButton.tap(); + if (serverUrl.includes('127.0.0.1') || !process.env.CI) { + try { + // # Tap alert okay button + await waitFor(Alert.okayButton).toExist().withTimeout(timeouts.TEN_SEC); + await Alert.okayButton.tap(); + } catch (error) { + /* eslint-disable no-console */ + console.log('Alert button did not appear!'); + } } } + await waitFor(this.usernameInput).toExist().withTimeout(timeouts.ONE_SEC); }; close = async () => { diff --git a/detox/e2e/support/utils/index.ts b/detox/e2e/support/utils/index.ts index cba31c95c20..6612b8d8135 100644 --- a/detox/e2e/support/utils/index.ts +++ b/detox/e2e/support/utils/index.ts @@ -62,7 +62,7 @@ export const getAdminAccount = () => { }; }; -const SECOND = 1000; +const SECOND = 1000 * (process.env.LOW_BANDWIDTH_MODE === 'true' ? 5 : 1); const MINUTE = 60 * 1000; export const timeouts = { @@ -76,3 +76,4 @@ export const timeouts = { TWO_MIN: MINUTE * 2, FOUR_MIN: MINUTE * 4, }; + diff --git a/detox/e2e/test/account/about.e2e.ts b/detox/e2e/test/account/about.e2e.ts index b91ecf1cab5..4944fdc9e08 100644 --- a/detox/e2e/test/account/about.e2e.ts +++ b/detox/e2e/test/account/about.e2e.ts @@ -69,7 +69,8 @@ describe('Account - Settings - About', () => { await expect(AboutScreen.databaseSchemaVersionTitle).toHaveText('Database Schema Version:'); await expect(AboutScreen.databaseSchemaVersionValue).toBeVisible(); await expect(AboutScreen.copyInfoButton).toBeVisible(); - await expect(AboutScreen.copyInfoButton).toHaveText('Copy info'); + await expect(element(by.text(new RegExp('Copy info', 'i')))).toBeVisible(); + if (isLicensed) { await expect(AboutScreen.licensee).toBeVisible(); } else { diff --git a/detox/e2e/test/channels/convert_to_private_channel.e2e.ts b/detox/e2e/test/channels/convert_to_private_channel.e2e.ts index 7579266ff2e..cacee2eee08 100644 --- a/detox/e2e/test/channels/convert_to_private_channel.e2e.ts +++ b/detox/e2e/test/channels/convert_to_private_channel.e2e.ts @@ -26,7 +26,7 @@ describe('Channels - Convert to Private Channel', () => { beforeAll(async () => { // # Log in to server as admin await ServerScreen.connectToServer(siteOneUrl, siteOneDisplayName); - await LoginScreen.login(getAdminAccount()); + await LoginScreen.loginAsAdmin(getAdminAccount()); }); beforeEach(async () => { diff --git a/detox/e2e/test/channels/find_channels.e2e.ts b/detox/e2e/test/channels/find_channels.e2e.ts index 41c4537962a..72317651597 100644 --- a/detox/e2e/test/channels/find_channels.e2e.ts +++ b/detox/e2e/test/channels/find_channels.e2e.ts @@ -71,19 +71,13 @@ describe('Channels - Find Channels', () => { it('MM-T4907_2 - should be able to find and navigate to a public channel', async () => { // # Open find channels screen and search for a public channel to navigate to await FindChannelsScreen.open(); - await FindChannelsScreen.searchInput.replaceText(testChannel.name); - - // * Verify search returns the target public channel item - await wait(timeouts.ONE_SEC); - await expect(FindChannelsScreen.getFilteredChannelItemDisplayName(testChannel.name)).toHaveText(testChannel.display_name); + await FindChannelsScreen.searchInput.replaceText(testChannel.display_name); // # Tap on the target public channel item await FindChannelsScreen.getFilteredChannelItem(testChannel.name).tap(); // * Verify on target public channel screen - await ChannelScreen.toBeVisible(); - await expect(ChannelScreen.headerTitle).toHaveText(testChannel.display_name); - await expect(ChannelScreen.introDisplayName).toHaveText(testChannel.display_name); + await verifyDetailsOnChannelScreen(testChannel.display_name); // # Go back to channel list screen await ChannelScreen.back(); @@ -124,10 +118,13 @@ describe('Channels - Find Channels', () => { // * Verify search returns the target group message channel item await wait(timeouts.ONE_SEC); - await expect(FindChannelsScreen.getFilteredChannelItemDisplayName(groupMessageChannel.name)).toHaveText(`${testOtherUser1.username}, ${testOtherUser2.username}, sysadmin`); + await FindChannelsScreen.getFilteredChannelItem(groupMessageChannel.name).tap(); + + // * Verify on target GM screen + await verifyDetailsOnChannelScreen(`${testOtherUser1.username}, admin, ${testOtherUser2.username}`); // # Go back to channel list screen - await FindChannelsScreen.close(); + await ChannelScreen.back(); }); it('MM-T4907_5 - should be able to find an archived channel', async () => { @@ -140,10 +137,14 @@ describe('Channels - Find Channels', () => { // * Verify search returns the target archived channel item await wait(timeouts.ONE_SEC); - await expect(FindChannelsScreen.getFilteredChannelItemDisplayName(archivedChannel.name)).toHaveText(archivedChannel.display_name); + await FindChannelsScreen.getFilteredChannelItem(archivedChannel.name).tap(); - // # Go back to channel list screen - await FindChannelsScreen.close(); + // * Verify on archievd channel name + await verifyDetailsOnChannelScreen(archivedChannel.display_name); + + // # Go back to channel list screen by closing archived channel + await expect(ChannelScreen.archievedCloseChannelButton).toBeVisible(); + await ChannelScreen.archievedCloseChannelButton.tap(); }); it('MM-T4907_6 - should be able to find a joined private channel and not find an unjoined private channel', async () => { @@ -156,7 +157,6 @@ describe('Channels - Find Channels', () => { // * Verify search returns the target joined private channel item await wait(timeouts.ONE_SEC); - await expect(FindChannelsScreen.getFilteredChannelItemDisplayName(joinedPrivateChannel.name)).toHaveText(joinedPrivateChannel.display_name); // # Search for an unjoined private channel await FindChannelsScreen.searchInput.replaceText(unjoinedPrivateChannel.name); @@ -169,3 +169,9 @@ describe('Channels - Find Channels', () => { await FindChannelsScreen.close(); }); }); + +async function verifyDetailsOnChannelScreen(display_name: string) { + await ChannelScreen.toBeVisible(); + await expect(ChannelScreen.headerTitle).toHaveText(display_name); + await expect(ChannelScreen.introDisplayName).toHaveText(display_name); +} diff --git a/detox/e2e/test/channels/unarchive_channel.e2e.ts b/detox/e2e/test/channels/unarchive_channel.e2e.ts index 6d7db8d3ab5..dbfe12d31b9 100644 --- a/detox/e2e/test/channels/unarchive_channel.e2e.ts +++ b/detox/e2e/test/channels/unarchive_channel.e2e.ts @@ -22,12 +22,11 @@ import {expect} from 'detox'; describe('Channels - Unarchive Channel', () => { const serverOneDisplayName = 'Server 1'; - const channelsCategory = 'channels'; beforeAll(async () => { // # Log in to server as admin await ServerScreen.connectToServer(serverOneUrl, serverOneDisplayName); - await LoginScreen.login(getAdminAccount()); + await LoginScreen.loginAsAdmin(getAdminAccount()); }); beforeEach(async () => { @@ -43,7 +42,6 @@ describe('Channels - Unarchive Channel', () => { it('MM-T4944_1 - should be able to unarchive a public channel and confirm', async () => { // # Create a public channel screen, open channel info screen, and tap on archive channel option and confirm const channelDisplayName = `Channel ${getRandomId()}`; - const channelName = channelDisplayName.replace(/ /, '-').toLowerCase(); await CreateOrEditChannelScreen.openCreateChannel(); await CreateOrEditChannelScreen.displayNameInput.replaceText(channelDisplayName); await CreateOrEditChannelScreen.createButton.tap(); @@ -57,8 +55,6 @@ describe('Channels - Unarchive Channel', () => { // # Open channel info screen, tap on unarchive channel and confirm, close and re-open app to reload, and re-open unarchived public channel await ChannelInfoScreen.open(); await ChannelInfoScreen.unarchivePublicChannel({confirm: true}); - await device.reloadReactNative(); - await ChannelScreen.open(channelsCategory, channelName); // * Verify on unarchived public channel screen and active post draft is displayed await ChannelScreen.toBeVisible(); @@ -71,7 +67,6 @@ describe('Channels - Unarchive Channel', () => { it('MM-T4944_2 - should be able to unarchive a private channel and confirm', async () => { // # Create a private channel screen, open channel info screen, and tap on archive channel option and confirm const channelDisplayName = `Channel ${getRandomId()}`; - const channelName = channelDisplayName.replace(/ /, '-').toLowerCase(); await CreateOrEditChannelScreen.openCreateChannel(); await CreateOrEditChannelScreen.toggleMakePrivateOn(); await CreateOrEditChannelScreen.displayNameInput.replaceText(channelDisplayName); @@ -86,8 +81,6 @@ describe('Channels - Unarchive Channel', () => { // # Open channel info screen, tap on unarchive channel and confirm, close and re-open app to reload, and re-open unarchived private channel await ChannelInfoScreen.open(); await ChannelInfoScreen.unarchivePrivateChannel({confirm: true}); - await device.reloadReactNative(); - await ChannelScreen.open(channelsCategory, channelName); // * Verify on unarchived private channel screen and active post draft is displayed await ChannelScreen.toBeVisible(); diff --git a/detox/e2e/test/messaging/emojis_and_reactions.e2e.ts b/detox/e2e/test/messaging/emojis_and_reactions.e2e.ts index e735417ad7e..4b367b8ce7e 100644 --- a/detox/e2e/test/messaging/emojis_and_reactions.e2e.ts +++ b/detox/e2e/test/messaging/emojis_and_reactions.e2e.ts @@ -24,6 +24,7 @@ import { PostOptionsScreen, ReactionsScreen, ServerScreen, + UserProfileScreen, } from '@support/ui/screen'; import {getRandomId} from '@support/utils'; import {expect} from 'detox'; @@ -115,14 +116,15 @@ describe('Messaging - Emojis and Reactions', () => { // * Verify user who reacted with the emoji await ReactionsScreen.toBeVisible(); - const {reactorItemEmojiAliases, reactorItemUserProfilePicture, reactorItemUserDisplayName, reactorItemUsername} = ReactionsScreen.getReactorItem(testUser.id, 'fire'); + const {reactorItemEmojiAliases, reactorItemUserProfilePicture, reactorItemUser} = ReactionsScreen.getReactorItem(testUser.id, 'fire'); await expect(reactorItemEmojiAliases).toHaveText(':fire:'); await expect(reactorItemUserProfilePicture).toBeVisible(); - await expect(reactorItemUserDisplayName).toHaveText(`${testUser.first_name} ${testUser.last_name}`); - await expect(reactorItemUsername).toHaveText(` @${testUser.username}`); + await expect(reactorItemUser).toBeVisible(); + await reactorItemUser.tap(); + await expect(UserProfileScreen.userDisplayName).toHaveText(`@${testUser.username}`); // # Go back to channel list screen - await ReactionsScreen.close(); + await UserProfileScreen.close(); await ChannelScreen.back(); }); diff --git a/detox/e2e/test/messaging/message_draft.e2e.ts b/detox/e2e/test/messaging/message_draft.e2e.ts index 6ee9b4a063d..deb0f0d0ab8 100644 --- a/detox/e2e/test/messaging/message_draft.e2e.ts +++ b/detox/e2e/test/messaging/message_draft.e2e.ts @@ -92,6 +92,7 @@ describe('Messaging - Message Draft', () => { const message = `Message ${getRandomId()}`; await ChannelScreen.open(channelsCategory, testChannel.name); await ChannelScreen.postInput.tap(); + await ChannelScreen.postInput.clearText(); await ChannelScreen.postInput.replaceText(message); // * Verify message draft exists in post draft @@ -122,6 +123,7 @@ describe('Messaging - Message Draft', () => { let message = '1234567890'.repeat(1638) + '1234'; await ChannelScreen.open(channelsCategory, testChannel.name); await ChannelScreen.postInput.tap(); + await ChannelScreen.postInput.clearText(); await ChannelScreen.postInput.replaceText(message); // * Verify warning message is displayed and send button is disabled @@ -144,7 +146,7 @@ describe('Messaging - Message Draft', () => { await ChannelScreen.back(); }); - it('MM-T4781_4 - should be able to create a message draft from reply thread -- KNOWN ISSUE: MM-50298', async () => { + it('MM-T4781_4 - should be able to create a message draft from reply thread', async () => { // # Open a channel screen, post a message, and tap on the post to open reply thread const message = `Message ${getRandomId()}`; await ChannelScreen.open(channelsCategory, testChannel.name); diff --git a/detox/e2e/test/messaging/message_reply.e2e.ts b/detox/e2e/test/messaging/message_reply.e2e.ts index 3128b11a7b8..380a389a664 100644 --- a/detox/e2e/test/messaging/message_reply.e2e.ts +++ b/detox/e2e/test/messaging/message_reply.e2e.ts @@ -107,7 +107,7 @@ describe('Messaging - Message Reply', () => { await ChannelScreen.back(); }); - it('MM-T4785_3 - should not have reply option available on reply thread post options -- KNOWN ISSUE: MM-50206', async () => { + it('MM-T4785_3 - should not have reply option available on reply thread post options', async () => { // # Open a channel screen, post a message, and tap on the post const message = `Message ${getRandomId()}`; await ChannelScreen.open(channelsCategory, testChannel.name); diff --git a/detox/e2e/test/server_login/login_by_email.e2e.ts b/detox/e2e/test/server_login/login_by_email.e2e.ts index 21323e0989b..e58704a592b 100644 --- a/detox/e2e/test/server_login/login_by_email.e2e.ts +++ b/detox/e2e/test/server_login/login_by_email.e2e.ts @@ -60,15 +60,15 @@ describe('Server Login - Login by Email', () => { it('MM-T4677_2 - should show disabled signin button on empty username or password', async () => { // # Log in with empty username and non-empty password - await usernameInput.replaceText(''); - await passwordInput.replaceText('password'); + await usernameInput.clearText(); + await passwordInput.typeText('password'); // * Verify signin button is disabled await expect(signinButtonDisabled).toBeVisible(); // # Log in with non-empty username and empty password - await usernameInput.replaceText('username'); - await passwordInput.replaceText(''); + await usernameInput.typeText('username'); + await passwordInput.clearText(); // * Verify signin button is disabled await expect(signinButtonDisabled).toBeVisible(); @@ -76,8 +76,8 @@ describe('Server Login - Login by Email', () => { it('MM-T4677_3 - should show incorrect combination error on incorrect credentials', async () => { // # Log in with incorrect credentials - await usernameInput.replaceText('username'); - await passwordInput.replaceText('password'); + await usernameInput.typeText('username'); + await passwordInput.typeText('password'); await signinButton.tap(); // * Verify incorrect combination error @@ -87,8 +87,8 @@ describe('Server Login - Login by Email', () => { it('MM-T4677_4 - should show channel list screen on successful login', async () => { // # Log in to server with correct credentials const {team, user} = await Setup.apiInit(siteOneUrl); - await usernameInput.replaceText(user.username); - await passwordInput.replaceText(user.password); + await usernameInput.typeText(user.newUser.username); + await passwordInput.typeText(user.newUser.password); await signinButton.tap(); // * Verify on channel list screen and channel list header shows team display name and server display name diff --git a/detox/e2e/test/smoke_test/autocomplete.e2e.ts b/detox/e2e/test/smoke_test/autocomplete.e2e.ts index 5c06037410d..bf4c924ae25 100644 --- a/detox/e2e/test/smoke_test/autocomplete.e2e.ts +++ b/detox/e2e/test/smoke_test/autocomplete.e2e.ts @@ -85,7 +85,7 @@ describe('Smoke Test - Autocomplete', () => { await ChannelScreen.hasPostMessage(post.id, `@${testUser.username}`); }); - it('MM-T4886_2 - should be able to select and post channel mention suggestion -- KNOWN ISSUE: MM-50351', async () => { + it('MM-T4886_2 - should be able to select and post channel mention suggestion', async () => { // # Type in "~" to activate channel mention autocomplete await ChannelScreen.postInput.typeText('~'); await Autocomplete.toBeVisible(); @@ -136,7 +136,7 @@ describe('Smoke Test - Autocomplete', () => { await ChannelScreen.hasPostMessage(post.id, '🦊'); }); - it('MM-T4886_4 - should be able to select and post slash suggestion -- KNOWN ISSUE: MM-50351', async () => { + it('MM-T4886_4 - should be able to select and post slash suggestion', async () => { // # Type in "/" to activate slash suggestion autocomplete await ChannelScreen.postInput.typeText('/'); await Autocomplete.toBeVisible(); diff --git a/detox/e2e/test/teams/invite_people.e2e.ts b/detox/e2e/test/teams/invite_people.e2e.ts index c74dfef7cc0..a29d4b61f45 100644 --- a/detox/e2e/test/teams/invite_people.e2e.ts +++ b/detox/e2e/test/teams/invite_people.e2e.ts @@ -202,9 +202,6 @@ describe('Teams - Invite', () => { it('MM-T5365 - should handle both sent and not sent invites', async () => { const {user: testUser2} = await User.apiCreateUser(siteOneUrl, {prefix: 'i'}); - const username1 = ` @${testUser1.username}`; - const username2 = ` @${testUser2.username}`; - // # Search for an existent user await Invite.searchBarInput.replaceText(testUser2.username); @@ -218,31 +215,31 @@ describe('Teams - Invite', () => { await expect(Invite.getSelectedItem(testUser2.id)).toBeVisible(); // # Search for a existent user already in team - await Invite.searchBarInput.replaceText(testUser1.username); + await Invite.searchBarInput.replaceText(testUser.username); // # Wait for user item in search list - await waitFor(Invite.getSearchListUserItem(testUser1.id)).toExist().withTimeout(timeouts.TWO_SEC); + await waitFor(Invite.getSearchListUserItem(testUser.id)).toExist().withTimeout(timeouts.TWO_SEC); // # Select user item - await Invite.getSearchListUserItem(testUser1.id).tap(); + await Invite.getSearchListUserItem(testUser.id).tap(); // * Validate user is added to selected items - await expect(Invite.getSelectedItem(testUser1.id)).toBeVisible(); + await expect(Invite.getSelectedItem(testUser.id)).toBeVisible(); // # Send invitation await Invite.sendButton.tap(); // * Validate summary - await waitFor(Invite.screenSummary).toBeVisible().withTimeout(timeouts.TEN_SEC); + waitFor(Invite.screenSummary).toBeVisible(); // * Validate summary report not sent await expect(Invite.getSummaryReportNotSent()).toBeVisible(); - await expect(Invite.getSummaryReportUserItem(testUser1.id)).toBeVisible(); - await expect(Invite.getSummaryReportUserItemText(testUser1.id)).toHaveText(username1); + await expect(Invite.getSummaryReportUserItem(testUser.id)).toBeVisible(); + await expect(Invite.getSummaryReportUserItemText(testUser.id)).toBeVisible(testUser.username1); // * Validate summary report sent - await waitFor(Invite.getSummaryReportSent()).toBeVisible().withTimeout(timeouts.TEN_SEC); + waitFor(Invite.getSummaryReportSent()).toBeVisible(); await expect(Invite.getSummaryReportUserItem(testUser2.id)).toBeVisible(); - await expect(Invite.getSummaryReportUserItemText(testUser2.id)).toHaveText(username2); + await expect(Invite.getSummaryReportUserItemText(testUser2.id)).toBeVisible(testUser2.username1); }); }); diff --git a/detox/package-lock.json b/detox/package-lock.json index 0448a8bcc3e..3c31c70634b 100644 --- a/detox/package-lock.json +++ b/detox/package-lock.json @@ -1,874 +1,1006 @@ { "name": "mattermost-mobile-e2e", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mattermost-mobile-e2e", "devDependencies": { - "@aws-sdk/client-s3": "3.445.0", - "@aws-sdk/lib-storage": "3.445.0", + "@aws-sdk/client-s3": "3.650.0", + "@aws-sdk/lib-storage": "3.650.0", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-transform-modules-commonjs": "7.22.15", - "@babel/plugin-transform-runtime": "7.22.15", - "@babel/preset-env": "7.22.20", + "@babel/plugin-transform-modules-commonjs": "7.24.8", + "@babel/plugin-transform-runtime": "7.25.4", + "@babel/preset-env": "7.25.4", "@jest/test-sequencer": "29.7.0", - "@types/jest": "29.5.5", - "@types/tough-cookie": "4.0.3", - "@types/uuid": "9.0.4", - "axios": "1.5.0", - "axios-cookiejar-support": "4.0.7", + "@types/jest": "29.5.12", + "@types/tough-cookie": "4.0.5", + "@types/uuid": "10.0.0", + "async": "3.2.6", + "axios": "1.7.7", + "axios-cookiejar-support": "5.0.2", "babel-jest": "29.7.0", - "babel-plugin-module-resolver": "5.0.0", + "babel-plugin-module-resolver": "5.0.2", "client-oauth2": "4.3.3", "deepmerge": "4.3.1", - "detox": "20.11.4", + "detox": "20.26.2", "form-data": "4.0.0", "jest": "29.7.0", "jest-circus": "29.7.0", "jest-cli": "29.7.0", - "jest-html-reporters": "3.1.4", + "jest-html-reporters": "3.1.7", "jest-junit": "16.0.0", - "jest-stare": "2.5.1", - "junit-report-merger": "6.0.2", - "moment-timezone": "0.5.43", + "jest-stare": "2.5.2", + "junit-report-merger": "7.0.0", + "moment-timezone": "0.5.45", "recursive-readdir": "2.2.3", "sanitize-filename": "1.6.3", "shelljs": "0.8.5", - "tough-cookie": "4.1.3", - "ts-jest": "29.1.1", - "tslib": "2.6.2", - "typescript": "5.2.2", - "uuid": "9.0.1", + "tough-cookie": "5.0.0", + "ts-jest": "29.2.5", + "tslib": "2.7.0", + "typescript": "5.6.2", + "uuid": "10.0.0", "xml2js": "0.6.2" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/crc32c/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^1.11.1" + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.445.0.tgz", - "integrity": "sha512-2G+3MnO78irZRjlfkdvtlKRQ3yuOfrRMg8mztKpMw0q/9WHtwCcmaUUpl1bXwJ+BcNTVHopLQXdbzCeaxxI92w==", - "dev": true, - "dependencies": { - "@aws-crypto/sha1-browser": "3.0.0", - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.445.0", - "@aws-sdk/core": "3.445.0", - "@aws-sdk/credential-provider-node": "3.445.0", - "@aws-sdk/middleware-bucket-endpoint": "3.433.0", - "@aws-sdk/middleware-expect-continue": "3.433.0", - "@aws-sdk/middleware-flexible-checksums": "3.433.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-location-constraint": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-sdk-s3": "3.440.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-ssec": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/signature-v4-multi-region": "3.437.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@aws-sdk/xml-builder": "3.310.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/eventstream-serde-browser": "^2.0.12", - "@smithy/eventstream-serde-config-resolver": "^2.0.12", - "@smithy/eventstream-serde-node": "^2.0.12", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-blob-browser": "^2.0.12", - "@smithy/hash-node": "^2.0.12", - "@smithy/hash-stream-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/md5-js": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-stream": "^2.0.17", - "@smithy/util-utf8": "^2.0.0", - "@smithy/util-waiter": "^2.0.12", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.445.0.tgz", - "integrity": "sha512-me4LvqNnu6kxi+sW7t0AgMv1Yi64ikas0x2+5jv23o6Csg32w0S0xOjCTKQYahOA5CMFunWvlkFIfxbqs+Uo7w==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.445.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.650.0.tgz", + "integrity": "sha512-6ZfkDu2FMOtYPV1ah5vWMqFKNKEqlBQ3/NOVvLGscU1dR0ybbOwwm4ywWofZmz72uOts5NGqe12kzohb/AsGAA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.650.0", + "@aws-sdk/client-sts": "3.650.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-bucket-endpoint": "3.649.0", + "@aws-sdk/middleware-expect-continue": "3.649.0", + "@aws-sdk/middleware-flexible-checksums": "3.649.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-location-constraint": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-sdk-s3": "3.649.0", + "@aws-sdk/middleware-ssec": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/signature-v4-multi-region": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@aws-sdk/xml-builder": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/eventstream-serde-browser": "^3.0.7", + "@smithy/eventstream-serde-config-resolver": "^3.0.4", + "@smithy/eventstream-serde-node": "^3.0.6", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-blob-browser": "^3.1.3", + "@smithy/hash-node": "^3.0.4", + "@smithy/hash-stream-node": "^3.1.3", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/md5-js": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-stream": "^3.1.4", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.650.0.tgz", + "integrity": "sha512-YKm14gCMChD/jlCisFlsVqB8HJujR41bl4Fup2crHwNJxhD/9LTnzwMiVVlBqlXr41Sfa6fSxczX2AMP8NM14A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.650.0.tgz", + "integrity": "sha512-6J7IS0f8ovhvbIAZaynOYP+jPX8344UlTjwHxjaXHgFvI8axu3+NslKtEEV5oHLhgzDvrKbinsu5lgE2n4Sqng==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.650.0" + } + }, "node_modules/@aws-sdk/client-sts": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.445.0.tgz", - "integrity": "sha512-ogbdqrS8x9O5BTot826iLnTQ6i4/F5BSi/74gycneCxYmAnYnyUBNOWVnynv6XZiEWyDJQCU2UtMd52aNGW1GA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.445.0", - "@aws-sdk/credential-provider-node": "3.445.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-sdk-sts": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-utf8": "^2.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.650.0.tgz", + "integrity": "sha512-ISK0ZQYA7O5/WYgslpWy956lUBudGC9d7eL0FFbiL0j50N80Gx3RUv22ezvZgxJWE0W3DqNr4CE19sPYn4Lw8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.650.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/core": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.445.0.tgz", - "integrity": "sha512-6GYLElUG1QTOdmXG8zXa+Ull9IUeSeItKDYHKzHYfIkbsagMfYlf7wm9XIYlatjtgodNfZ3gPHAJfRyPmwKrsg==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.649.0.tgz", + "integrity": "sha512-dheG/X2y25RHE7K+TlS32kcy7TgDg1OpWV44BQRoE0OBPAWmFR1D1qjjTZ7WWrdqRPKzcnDj1qED8ncyncOX8g==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/smithy-client": "^2.1.12", - "tslib": "^2.5.0" + "@smithy/core": "^2.4.1", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/property-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.1", + "@smithy/signature-v4": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/util-middleware": "^3.0.4", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.433.0.tgz", - "integrity": "sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.649.0.tgz", + "integrity": "sha512-tViwzM1dauksA3fdRjsg0T8mcHklDa8EfveyiQKK6pUJopkqV6FQx+X5QNda0t/LrdEVlFZvwHNdXqOEfc83TA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.445.0.tgz", - "integrity": "sha512-R7IYSGjNZ5KKJwQJ2HNPemjpAMWvdce91i8w+/aHfqeGfTXrmYJu99PeGRyyBTKEumBaojyjTRvmO8HzS+/l7g==", + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.649.0.tgz", + "integrity": "sha512-ODAJ+AJJq6ozbns6ejGbicpsQ0dyMOpnGlg0J9J0jITQ05DKQZ581hdB8APDOZ9N8FstShP6dLZflSj8jb5fNA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.433.0", - "@aws-sdk/credential-provider-process": "3.433.0", - "@aws-sdk/credential-provider-sso": "3.445.0", - "@aws-sdk/credential-provider-web-identity": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/util-stream": "^3.1.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.445.0.tgz", - "integrity": "sha512-zI4k4foSjQRKNEsouculRcz7IbLfuqdFxypDLYwn+qPNMqJwWJ7VxOOeBSPUpHFcd7CLSfbHN2JAhQ7M02gPTA==", + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.650.0.tgz", + "integrity": "sha512-x2M9buZxIsKuUbuDgkGHhAKYBpn0/rYdKlwuFuOhXyyAcnhvPj0lgNF2KE4ld/GF1mKr7FF/uV3G9lM6PFaYmA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.433.0", - "@aws-sdk/credential-provider-ini": "3.445.0", - "@aws-sdk/credential-provider-process": "3.433.0", - "@aws-sdk/credential-provider-sso": "3.445.0", - "@aws-sdk/credential-provider-web-identity": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/credential-provider-env": "3.649.0", + "@aws-sdk/credential-provider-http": "3.649.0", + "@aws-sdk/credential-provider-process": "3.649.0", + "@aws-sdk/credential-provider-sso": "3.650.0", + "@aws-sdk/credential-provider-web-identity": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@smithy/credential-provider-imds": "^3.2.1", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.650.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.650.0.tgz", + "integrity": "sha512-uBra5YjzS/gWSekAogfqJfY6c+oKQkkou7Cjc4d/cpMNvQtF1IBdekJ7NaE1RfsDEz3uH1+Myd07YWZAJo/2Qw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.649.0", + "@aws-sdk/credential-provider-http": "3.649.0", + "@aws-sdk/credential-provider-ini": "3.650.0", + "@aws-sdk/credential-provider-process": "3.649.0", + "@aws-sdk/credential-provider-sso": "3.650.0", + "@aws-sdk/credential-provider-web-identity": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@smithy/credential-provider-imds": "^3.2.1", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.433.0.tgz", - "integrity": "sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.649.0.tgz", + "integrity": "sha512-6VYPQpEVpU+6DDS/gLoI40ppuNM5RPIEprK30qZZxnhTr5wyrGOeJ7J7wbbwPOZ5dKwta290BiJDU2ipV8Y9BQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.445.0.tgz", - "integrity": "sha512-gJz7kAiDecdhtApgXnxfZsXKsww8BnifDF9MAx9Dr4X6no47qYsCCS3XPuEyRiF9VebXvHOH0H260Zp3bVyniQ==", + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.650.0.tgz", + "integrity": "sha512-069nkhcwximbvyGiAC6Fr2G+yrG/p1S3NQ5BZ2cMzB1hgUKo6TvgFK7nriYI4ljMQ+UWxqPwIdTqiUmn2iJmhg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.445.0", - "@aws-sdk/token-providers": "3.438.0", - "@aws-sdk/types": "3.433.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/client-sso": "3.650.0", + "@aws-sdk/token-providers": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.433.0.tgz", - "integrity": "sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.649.0.tgz", + "integrity": "sha512-XVk3WsDa0g3kQFPmnCH/LaCtGY/0R2NDv7gscYZSXiBZcG/fixasglTprgWSp8zcA0t7tEIGu9suyjz8ZwhymQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.649.0" } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.445.0.tgz", - "integrity": "sha512-sCP3lh71oMkx/B3+tSOGr81cff1Z1Yy5ejh5xa/YuH6OefQUFBM7/EC0CJiNfVXemh3D6O+biKETL+t2rAiZoQ==", + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.650.0.tgz", + "integrity": "sha512-pFVeIsPtDKU5uMX4wvoIKmPhahwHQAekr3shj1YG7WyT35hNY+DHVr9sPo7sU7lP9fspHKqrWDOv++EBqrOQQA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^2.0.1", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/smithy-client": "^2.1.12", + "@smithy/abort-controller": "^3.1.2", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/smithy-client": "^3.3.0", "buffer": "5.6.0", "events": "3.3.0", "stream-browserify": "3.0.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" + "@aws-sdk/client-s3": "^3.650.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.433.0.tgz", - "integrity": "sha512-Lk1xIu2tWTRa1zDw5hCF1RrpWQYSodUhrS/q3oKz8IAoFqEy+lNaD5jx+fycuZb5EkE4IzWysT+8wVkd0mAnOg==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.649.0.tgz", + "integrity": "sha512-ZdDICtUU4YZkrVllTUOH1Fj/F3WShLhkfNKJE3HJ/yj6pS8JS9P2lWzHiHkHiidjrHSxc6NuBo6vuZ+182XLbw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-arn-parser": "3.310.0", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "@smithy/util-config-provider": "^2.0.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.433.0.tgz", - "integrity": "sha512-Uq2rPIsjz0CR2sulM/HyYr5WiqiefrSRLdwUZuA7opxFSfE808w5DBWSprHxbH3rbDSQR4nFiOiVYIH8Eth7nA==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.649.0.tgz", + "integrity": "sha512-pW2id/mWNd+L0/hZKp5yL3J+8rTwsamu9E69Hc5pM3qTF4K4DTZZ+A0sQbY6duIvZvc8IbQHbSMulBOLyWNP3A==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.433.0.tgz", - "integrity": "sha512-Ptssx373+I7EzFUWjp/i/YiNFt6I6sDuRHz6DOUR9nmmRTlHHqmdcBXlJL2d9wwFxoBRCN8/PXGsTc/DJ4c95Q==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.649.0.tgz", + "integrity": "sha512-8mzMBEA+Tk6rbrS8iqnXX119C6z+Id84cuzvUc6dAiYcbnOVbus8M4XKKsAFzGGXHCRc2gMwYhKdnoVz2ijaFA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.433.0", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-sdk/types": "3.649.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.433.0.tgz", - "integrity": "sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.649.0.tgz", + "integrity": "sha512-PjAe2FocbicHVgNNwdSZ05upxIO7AgTPFtQLpnIAmoyzMcgv/zNB5fBn3uAnQSAeEPPCD+4SYVEUD1hw1ZBvEg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.433.0.tgz", - "integrity": "sha512-2YD860TGntwZifIUbxm+lFnNJJhByR/RB/+fV1I8oGKg+XX2rZU+94pRfHXRywoZKlCA0L+LGDA1I56jxrB9sw==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.649.0.tgz", + "integrity": "sha512-O9AXhaFUQx34UTnp/cKCcaWW/IVk4mntlWfFjsIxvRatamKaY33b5fOiakGG+J1t0QFK0niDBSvOYUR1fdlHzw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.433.0.tgz", - "integrity": "sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.649.0.tgz", + "integrity": "sha512-qdqRx6q7lYC6KL/NT9x3ShTL0TBuxdkCczGzHzY3AnOoYUjnCDH7Vlq867O6MAvb4EnGNECFzIgtkZkQ4FhY5w==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.433.0.tgz", - "integrity": "sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.649.0.tgz", + "integrity": "sha512-IPnO4wlmaLRf6IYmJW2i8gJ2+UPXX0hDRv1it7Qf8DpBW+lGyF2rnoN7NrFX0WIxdGOlJF1RcOr/HjXb2QeXfQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.440.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.440.0.tgz", - "integrity": "sha512-DVTSr+82Z8jR9xTwDN3YHzxX7qvi0n96V92OfxvSRDq2BldCEx/KEL1orUZjw97SAXhINOlUWjRR7j4HpwWQtQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-arn-parser": "3.310.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.433.0.tgz", - "integrity": "sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==", - "dev": true, - "dependencies": { - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.433.0.tgz", - "integrity": "sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.4.0", - "@smithy/util-middleware": "^2.0.5", - "tslib": "^2.5.0" + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.649.0.tgz", + "integrity": "sha512-3H8735xTAD7IxNdreT6qv2YRk4CGOGfz8ufZo5pROJYZ4N5rfcdDMvb8szMSLvQHegqS4v1DqO9nrOPgc0I2Qg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/core": "^2.4.1", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/protocol-http": "^4.1.1", + "@smithy/signature-v4": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-stream": "^3.1.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.433.0.tgz", - "integrity": "sha512-2AMaPx0kYfCiekxoL7aqFqSSoA9du+yI4zefpQNLr+1cZOerYiDxdsZ4mbqStR1CVFaX6U6hrYokXzjInsvETw==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.649.0.tgz", + "integrity": "sha512-r/WBIpX+Kcx+AV5vJ+LbdDOuibk7spBqcFK2LytQjOZKPksZNRAM99khbFe9vr9S1+uDmCLVjAVkIfQ5seJrOw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.438.0.tgz", - "integrity": "sha512-a+xHT1wOxT6EA6YyLmrfaroKWOkwwyiktUfXKM0FsUutGzNi4fKhb5NZ2al58NsXzHgHFrasSDp+Lqbd/X2cEw==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.649.0.tgz", + "integrity": "sha512-q6sO10dnCXoxe9thobMJxekhJumzd1j6dxcE1+qJdYKHJr6yYgWbogJqrLCpWd30w0lEvnuAHK8lN2kWLdJxJw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.433.0.tgz", - "integrity": "sha512-xpjRjCZW+CDFdcMmmhIYg81ST5UAnJh61IHziQEk0FXONrg4kjyYPZAOjEdzXQ+HxJQuGQLKPhRdzxmQnbX7pg==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.649.0.tgz", + "integrity": "sha512-xURBvdQXvRvca5Du8IlC5FyCj3pkw8Z75+373J3Wb+vyg8GjD14HfKk1Je1HCCQDyIE9VB/scYDcm9ri0ppePw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.437.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.437.0.tgz", - "integrity": "sha512-MmrqudssOs87JgVg7HGVdvJws/t4kcOrJJd+975ki+DPeSoyK2U4zBDfDkJ+n0tFuZBs3sLwLh0QXE7BV28rRA==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.649.0.tgz", + "integrity": "sha512-feJfSHtCarFmTMZSE5k7/A+m4FrdCrmotljc/AmXArWy3wl8XFyxE5tFVW/PiUgbgeoVDN+ZLt3YYtItHfNUWQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/middleware-sdk-s3": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/signature-v4": "^4.1.1", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.438.0.tgz", - "integrity": "sha512-G2fUfTtU6/1ayYRMu0Pd9Ln4qYSvwJOWCqJMdkDgvXSwdgcOSOLsnAIk1AHGJDAvgLikdCzuyOsdJiexr9Vnww==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.649.0.tgz", + "integrity": "sha512-ZBqr+JuXI9RiN+4DSZykMx5gxpL8Dr3exIfFhxMiwAP3DQojwl0ub8ONjMuAjq9OvmX6n+jHZL6fBnNgnNFC8w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.649.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.433.0.tgz", - "integrity": "sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.649.0.tgz", + "integrity": "sha512-PuPw8RysbhJNlaD2d/PzOTf8sbf4Dsn2b7hwyGh7YVG3S75yTpxSAZxrnhKsz9fStgqFmnw/jUfV/G+uQAeTVw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", - "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", + "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.438.0.tgz", - "integrity": "sha512-6VyPTq1kN3GWxwFt5DdZfOsr6cJZPLjWh0troY/0uUv3hK74C9o3Y0Xf/z8UAUvQFkVqZse12O0/BgPVMImvfA==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.649.0.tgz", + "integrity": "sha512-bZI1Wc3R/KibdDVWFxX/N4AoJFG4VJ92Dp4WYmOrVD6VPkb8jPz7ZeiYc7YwPl8NoDjYyPneBV0lEoK/V8OKAA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/util-endpoints": "^1.0.2", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", + "@smithy/util-endpoints": "^2.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.433.0.tgz", - "integrity": "sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.649.0.tgz", + "integrity": "sha512-IY43r256LhKAvdEVQO/FPdUyVpcZS5EVxh/WHVdNzuN1bNLoUK2rIzuZqVA0EGguvCxoXVmQv9m50GvG7cGktg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.437.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.437.0.tgz", - "integrity": "sha512-JVEcvWaniamtYVPem4UthtCNoTBCfFTwYj7Y3CrWZ2Qic4TqrwLkAfaBGtI2TGrhIClVr77uzLI6exqMTN7orA==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.649.0.tgz", + "integrity": "sha512-x5DiLpZDG/AJmCIBnE3Xhpwy35QIo3WqNiOpw6ExVs1NydbM/e90zFPSfhME0FM66D/WorigvluBxxwjxDm/GA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -879,70 +1011,65 @@ } } }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - } - }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", - "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.649.0.tgz", + "integrity": "sha512-XVESKkK7m5LdCVzZ3NvAja40BEyCrfPqtaiFAAhJIvW2U1Edyugf2o3XikuQY62crGT6BZagxJFgOiLKvuTiTg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", - "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", + "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -953,67 +1080,58 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -1021,29 +1139,19 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.4", "semver": "^6.3.1" }, "engines": { @@ -1053,24 +1161,16 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1080,9 +1180,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -1095,75 +1195,45 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", - "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", - "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -1173,35 +1243,38 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1211,14 +1284,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1228,115 +1302,117 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -1344,13 +1420,47 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1360,14 +1470,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1376,10 +1487,28 @@ "@babel/core": "^7.13.0" } }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -1445,6 +1574,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1460,6 +1590,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1472,6 +1603,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1480,12 +1612,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1495,12 +1628,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1534,12 +1668,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1625,6 +1759,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1651,12 +1786,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1682,12 +1817,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1697,15 +1833,16 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", - "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", + "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.4" }, "engines": { "node": ">=6.9.0" @@ -1715,14 +1852,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1732,12 +1870,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1747,12 +1886,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", - "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1762,13 +1902,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1778,13 +1919,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1795,19 +1937,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.4", "globals": "^11.1.0" }, "engines": { @@ -1818,13 +1958,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1834,12 +1975,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", - "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1849,13 +1991,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1865,12 +2008,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1879,13 +2023,31 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1896,13 +2058,14 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1912,12 +2075,13 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1928,12 +2092,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1943,14 +2109,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" }, "engines": { "node": ">=6.9.0" @@ -1960,12 +2127,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1976,12 +2144,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1991,12 +2160,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -2007,12 +2177,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2022,13 +2193,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2038,14 +2210,15 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", - "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2055,15 +2228,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", - "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -2073,13 +2247,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2089,13 +2264,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2105,12 +2281,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2120,12 +2297,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -2136,12 +2314,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -2152,16 +2331,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" + "@babel/plugin-transform-parameters": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2171,13 +2350,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2187,12 +2367,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -2203,13 +2384,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", - "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -2220,12 +2402,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2235,13 +2418,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -2251,14 +2435,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -2269,12 +2454,13 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2284,12 +2470,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -2300,12 +2487,13 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2315,16 +2503,17 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz", - "integrity": "sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz", + "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -2334,22 +2523,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2359,13 +2540,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2375,12 +2557,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2390,12 +2573,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2405,12 +2589,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -2420,12 +2605,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2435,13 +2621,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2451,13 +2638,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2467,13 +2655,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -2483,25 +2672,29 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz", - "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.20", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", + "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.4", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -2513,60 +2706,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.15", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.15", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.15", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-modules-systemjs": "^7.22.11", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.22.15", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.25.4", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.4", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.25.4", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.19", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "engines": { @@ -2576,15 +2769,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -2606,10 +2790,11 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "dev": true, + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2618,34 +2803,33 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -2653,13 +2837,14 @@ } }, "node_modules/@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2672,6 +2857,13 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@flatten-js/interval-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.1.3.tgz", + "integrity": "sha512-xhFWUBoHJFF77cJO1D6REjdgJEMRf2Y2Z+eKEPav8evGKcLSnj1ud5pLXQSbGuxF3VSvT1rWhMfVpXEKJLTL+A==", + "dev": true, + "license": "MIT" + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -3105,14 +3297,14 @@ } }, "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -3145,9 +3337,9 @@ } }, "node_modules/@jest/reporters/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3308,12 +3500,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, "node_modules/@jest/transform/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3423,46 +3609,47 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -3480,6 +3667,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3493,6 +3681,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -3502,6 +3691,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3559,9 +3749,9 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.6", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", - "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "dev": true, "peer": true, "funding": { @@ -3582,9 +3772,9 @@ "dev": true }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" @@ -3600,683 +3790,763 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.12.tgz", - "integrity": "sha512-YIJyefe1mi3GxKdZxEBEuzYOeQ9xpYfqnFmWzojCssRAuR7ycxwpoRQgp965vuW426xUAQhCV5rCaWElQ7XsaA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.2.tgz", + "integrity": "sha512-b5g+PNujlfqIib9BjkNB108NyO5aZM/RXjfOCXRCqXQ1oPnIkfvdORrztbGgCZdPe/BN/MKDlrGA7PafKPM2jw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/chunked-blob-reader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", - "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", + "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", - "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", + "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/util-base64": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.16.tgz", - "integrity": "sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.6.tgz", + "integrity": "sha512-j7HuVNoRd8EhcFp0MzcUb4fG40C7BcyshH+fAd3Jhd8bINNFvEQYBrZoS/SK6Pun9WPlfoI8uuU2SMz8DsEGlA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.1.tgz", + "integrity": "sha512-7cts7/Oni7aCHebHGiBeWoz5z+vmH+Vx2Z/UW3XtXMslcxI3PEwBZxNinepwZjixS3n12fPc247PHWmjU7ndsQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.18.tgz", - "integrity": "sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.1.tgz", + "integrity": "sha512-4z/oTWpRF2TqQI3aCM89/PWu3kim58XU4kOCTtuTJnoaS4KT95cPWMxbQfTN2vzcOe96SOKO8QouQW/+ESB1fQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/property-provider": "^2.0.13", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.5", + "@smithy/property-provider": "^3.1.4", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.12.tgz", - "integrity": "sha512-ZZQLzHBJkbiAAdj2C5K+lBlYp/XJ+eH2uy+jgJgYIFW/o5AM59Hlj7zyI44/ZTDIQWmBxb3EFv/c5t44V8/g8A==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.3.tgz", + "integrity": "sha512-mKBrmhg6Zd3j07G9dkKTGmrU7pdJGTNz8LbZtIOR3QoodS5yDNqEqoXU4Eg38snZcnCAh7NPBsw5ndxtJPLiCg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.4.0", - "@smithy/util-hex-encoding": "^2.0.0", - "tslib": "^2.5.0" + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.4.0", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.12.tgz", - "integrity": "sha512-0pi8QlU/pwutNshoeJcbKR1p7Ie5STd8UFAMX5xhSoSJjNlxIv/OsHbF023jscMRN2Prrqd6ToGgdCnsZVQjvg==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.7.tgz", + "integrity": "sha512-UC4RQqyM8B0g5cX/xmWtsNgSBmZ13HrzCqoe5Ulcz6R462/egbIdfTXnayik7jkjvwOrCPL1N11Q9S+n68jPLA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/eventstream-serde-universal": "^3.0.6", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.12.tgz", - "integrity": "sha512-I0XfwQkIX3gAnbrU5rLMkBSjTM9DHttdbLwf12CXmj7SSI5dT87PxtKLRrZGanaCMbdf2yCep+MW5/4M7IbvQA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.4.tgz", + "integrity": "sha512-saIs5rtAMpifqL7u7nc5YeE/6gkenzXpSz5NwEyhIesRWtHK+zEuYn9KY8SArZEbPSHyGxvvgKk1z86VzfUGHw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.12.tgz", - "integrity": "sha512-vf1vMHGOkG3uqN9x1zKOhnvW/XgvhJXWqjV6zZiT2FMjlEayugQ1mzpSqr7uf89+BzjTzuZKERmOsEAmewLbxw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.6.tgz", + "integrity": "sha512-gRKGBdZah3EjZZgWcsTpShq4cZ4Q4JTTe1OPob+jrftmbYj6CvpeydZbH0roO5SvBG8SI3aBZIet9TGN3zUxUw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/eventstream-serde-universal": "^3.0.6", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.12.tgz", - "integrity": "sha512-xZ3ZNpCxIND+q+UCy7y1n1/5VQEYicgSTNCcPqsKawX+Vd+6OcFX7gUHMyPzL8cZr+GdmJuxNleqHlH4giK2tw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.6.tgz", + "integrity": "sha512-1jvXd4sFG+zKaL6WqrJXpL6E+oAMafuM5GPd4qF0+ccenZTX3DZugoCCjlooQyTh+TZho2FpdVYUf5J/bB/j6Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/eventstream-codec": "^3.1.3", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.4.tgz", - "integrity": "sha512-gIPRFEGi+c6V52eauGKrjDzPWF2Cu7Z1r5F8A3j2wcwz25sPG/t8kjsbEhli/tS/2zJp/ybCZXe4j4ro3yv/HA==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.5.tgz", + "integrity": "sha512-DjRtGmK8pKQMIo9+JlAKUt14Z448bg8nAN04yKIvlrrpmpRSG57s5d2Y83npks1r4gPtTRNbAFdQCoj9l3P2KQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^3.0.8", - "@smithy/querystring-builder": "^2.0.12", - "@smithy/types": "^2.4.0", - "@smithy/util-base64": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^4.1.1", + "@smithy/querystring-builder": "^3.0.4", + "@smithy/types": "^3.4.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-blob-browser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.12.tgz", - "integrity": "sha512-riLnV16f27yyePX8UF0deRHAeccUK8SrOxyTykSTrnVkgS3DsjNapZtTbd8OGNKEbI60Ncdb5GwN3rHZudXvog==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.3.tgz", + "integrity": "sha512-im9wAU9mANWW0OP0YGqwX3lw0nXG0ngyIcKQ8V/MUz1r7A6uO2lpPqKmAsH4VPGNLP2JPUhj4aW/m5UKkxX/IA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/chunked-blob-reader": "^2.0.0", - "@smithy/chunked-blob-reader-native": "^2.0.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/chunked-blob-reader": "^3.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.0", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.12.tgz", - "integrity": "sha512-fDZnTr5j9t5qcbeJ037aMZXxMka13Znqwrgy3PAqYj6Dm3XHXHftTH3q+NWgayUxl1992GFtQt1RuEzRMy3NnQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.4.tgz", + "integrity": "sha512-6FgTVqEfCr9z/7+Em8BwSkJKA2y3krf1em134x3yr2NHWVCo2KYI8tcA53cjeO47y41jwF84ntsEE0Pe6pNKlg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/hash-stream-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.12.tgz", - "integrity": "sha512-x/DrSynPKrW0k00q7aZ/vy531a3mRw79mOajHp+cIF0TrA1SqEMFoy/B8X0XtoAtlJWt/vvgeDNqt/KAeaAqMw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.3.tgz", + "integrity": "sha512-Tz/eTlo1ffqYn+19VaMjDDbmEWqYe4DW1PAWaS8HvgRdO6/k9hxNPt8Wv5laXoilxE20YzKugiHvxHyO6J7kGA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.12.tgz", - "integrity": "sha512-p5Y+iMHV3SoEpy3VSR7mifbreHQwVSvHSAz/m4GdoXfOzKzaYC8hYv10Ks7Deblkf7lhas8U+lAp9ThbBM+ZXA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.4.tgz", + "integrity": "sha512-MJBUrojC4SEXi9aJcnNOE3oNAuYNphgCGFXscaCj2TA/59BTcXhzHACP8jnnEU3n4yir/NSLKzxqez0T4x4tjA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/is-array-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", - "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/md5-js": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.12.tgz", - "integrity": "sha512-OgDt+Xnrw+W5z3MSl5KZZzebqmXrYl9UdbCiBYnnjErmNywwSjV6QB/Oic3/7hnsPniSU81n7Rvlhz2kH4EREQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.4.tgz", + "integrity": "sha512-qSlqr/+hybufIJgxQW2gYzGE6ywfOxkjjJVojbbmv4MtxfdDFfzRew+NOIOXcYgazW0f8OYBTIKsmNsjxpvnng==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.14.tgz", - "integrity": "sha512-poUNgKTw9XwPXfX9nEHpVgrMNVpaSMZbshqvPxFVoalF4wp6kRzYKOfdesSVectlQ51VtigoLfbXcdyPwvxgTg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.6.tgz", + "integrity": "sha512-AFyHCfe8rumkJkz+hCOVJmBagNBj05KypyDwDElA4TgMSA4eYDZRjVePFZuyABrJZFDc7uVj3dpFIDCEhf59SA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.3.tgz", - "integrity": "sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.1.tgz", + "integrity": "sha512-Irv+soW8NKluAtFSEsF8O3iGyLxa5oOevJb/e1yNacV9H7JP/yHyJuKST5YY2ORS1+W34VR8EuUrOF+K29Pl4g==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^2.0.12", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.2.2", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-middleware": "^2.0.5", - "tslib": "^2.5.0" + "@smithy/middleware-serde": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-middleware": "^3.0.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.18.tgz", - "integrity": "sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.16.tgz", + "integrity": "sha512-08kI36p1yB4CWO3Qi+UQxjzobt8iQJpnruF0K5BkbZmA/N/sJ51A1JJGJ36GgcbFyPfWw2FU48S5ZoqXt0h0jw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/protocol-http": "^3.0.8", - "@smithy/service-error-classification": "^2.0.5", - "@smithy/types": "^2.4.0", - "@smithy/util-middleware": "^2.0.5", - "@smithy/util-retry": "^2.0.5", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "@smithy/node-config-provider": "^3.1.5", + "@smithy/protocol-http": "^4.1.1", + "@smithy/service-error-classification": "^3.0.4", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-retry/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.12.tgz", - "integrity": "sha512-IBeco157lIScecq2Z+n0gq56i4MTnfKxS7rbfrAORveDJgnbBAaEQgYqMqp/cYqKrpvEXcyTjwKHrBjCCIZh2A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.4.tgz", + "integrity": "sha512-1lPDB2O6IJ50Ucxgn7XrvZXbbuI48HmPCcMTuSoXT1lDzuTUfIuBjgAjpD8YLVMfnrjdepi/q45556LA51Pubw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.6.tgz", - "integrity": "sha512-YSvNZeOKWLJ0M/ycxwDIe2Ztkp6Qixmcml1ggsSv2fdHKGkBPhGrX5tMzPGMI1yyx55UEYBi2OB4s+RriXX48A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.4.tgz", + "integrity": "sha512-sLMRjtMCqtVcrOqaOZ10SUnlFE25BSlmLsi4bRSGFD7dgR54eqBjfqkVkPBQyrKBortfGM0+2DJoUPcGECR+nQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/node-config-provider": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.3.tgz", - "integrity": "sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.5.tgz", + "integrity": "sha512-dq/oR3/LxgCgizVk7in7FGTm0w9a3qM4mg3IIXLTCHeW3fV+ipssSvBZ2bvEx1+asfQJTyCnVLeYf7JKfd9v3Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^2.0.13", - "@smithy/shared-ini-file-loader": "^2.2.2", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/node-http-handler": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.8.tgz", - "integrity": "sha512-KZylM7Wff/So5SmCiwg2kQNXJ+RXgz34wkxS7WNwIUXuZrZZpY/jKJCK+ZaGyuESDu3TxcaY+zeYGJmnFKbQsA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.0.tgz", + "integrity": "sha512-5TFqaABbiY7uJMKbqR4OARjwI/l4TRoysDJ75pLpVQyO3EcmeloKYwDGyCtgB9WJniFx3BMkmGCB9+j+QiB+Ww==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^2.0.12", - "@smithy/protocol-http": "^3.0.8", - "@smithy/querystring-builder": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.1.2", + "@smithy/protocol-http": "^4.1.1", + "@smithy/querystring-builder": "^3.0.4", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/property-provider": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.13.tgz", - "integrity": "sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.4.tgz", + "integrity": "sha512-BmhefQbfkSl9DeU0/e6k9N4sT5bya5etv2epvqLUz3eGyfRBhtQq60nDkc1WPp4c+KWrzK721cUc/3y0f2psPQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/protocol-http": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.8.tgz", - "integrity": "sha512-SHJvYeWq8q0FK8xHk+xjV9dzDUDjFMT+G1pZbV+XB6OVoac/FSVshlMNPeUJ8AmSkcDKHRu5vASnRqZHgD3qhw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.1.tgz", + "integrity": "sha512-Fm5+8LkeIus83Y8jTL1XHsBGP8sPvE1rEVyKf/87kbOPTbzEDMcgOlzcmYXat2h+nC3wwPtRy8hFqtJS71+Wow==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.12.tgz", - "integrity": "sha512-cDbF07IuCjiN8CdGvPzfJjXIrmDSelScRfyJYrYBNBbKl2+k7QD/KqiHhtRyEKgID5mmEVrV6KE6L/iPJ98sFw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.4.tgz", + "integrity": "sha512-NEoPAsZPdpfVbF98qm8i5k1XMaRKeEnO47CaL5ja6Y1Z2DgJdwIJuJkTJypKm/IKfp8gc0uimIFLwhml8+/pAw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "@smithy/util-uri-escape": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.12.tgz", - "integrity": "sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.4.tgz", + "integrity": "sha512-7CHPXffFcakFzhO0OZs/rn6fXlTHrSDdLhIT6/JIk1u2bvwguTL3fMCc1+CfcbXA7TOhjWXu3TcB1EGMqJQwHg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.5.tgz", - "integrity": "sha512-M0SeJnEgD2ywJyV99Fb1yKFzmxDe9JfpJiYTVSRMyRLc467BPU0qsuuDPzMCdB1mU8M8u1rVOdkqdoyFN8UFTw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.4.tgz", + "integrity": "sha512-KciDHHKFVTb9A1KlJHBt2F26PBaDtoE23uTZy5qRvPzHPqrooXFi6fmx98lJb3Jl38PuUTqIuCUmmY3pacuMBQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0" + "@smithy/types": "^3.4.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.2.tgz", - "integrity": "sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.5.tgz", + "integrity": "sha512-6jxsJ4NOmY5Du4FD0enYegNJl4zTSuKLiChIMqIkh+LapxiP7lmz5lYUNLE9/4cvA65mbBmtdzZ8yxmcqM5igg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/signature-v4": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.12.tgz", - "integrity": "sha512-6Kc2lCZEVmb1nNYngyNbWpq0d82OZwITH11SW/Q0U6PX5fH7B2cIcFe7o6eGEFPkTZTP8itTzmYiGcECL0D0Lw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.1.tgz", + "integrity": "sha512-SH9J9be81TMBNGCmjhrgMWu4YSpQ3uP1L06u/K9SDrE2YibUix1qxedPCxEQu02At0P0SrYDjvz+y91vLG0KRQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^2.0.12", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.4.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", - "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/smithy-client": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.12.tgz", - "integrity": "sha512-XXqhridfkKnpj+lt8vM6HRlZbqUAqBjVC74JIi13F/AYQd/zTj9SOyGfxnbp4mjY9q28LityxIuV8CTinr9r5w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.0.tgz", + "integrity": "sha512-H32nVo8tIX82kB0xI2LBrIcj8jx/3/ITotNLbeG1UL0b3b440YPR/hUvqjFJiaB24pQrMjRbU8CugqH5sV0hkw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-stack": "^2.0.6", - "@smithy/types": "^2.4.0", - "@smithy/util-stream": "^2.0.17", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "@smithy/util-stream": "^3.1.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/types": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.4.0.tgz", - "integrity": "sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.4.0.tgz", + "integrity": "sha512-0shOWSg/pnFXPcsSU8ZbaJ4JBHZJPPzLCJxafJvbMVFo9l1w81CqpgUqjlKGNHVrVB7fhIs+WS82JDTyzaLyLA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/url-parser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.12.tgz", - "integrity": "sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.4.tgz", + "integrity": "sha512-XdXfObA8WrloavJYtDuzoDhJAYc5rOt+FirFmKBRKaihu7QtU/METAxJgSo7uMK6hUkx0vFnqxV75urtRaLkLg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/querystring-parser": "^3.0.4", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-body-length-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", - "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-body-length-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", - "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-buffer-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-config-provider": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", - "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.16.tgz", - "integrity": "sha512-Uv5Cu8nVkuvLn0puX+R9zWbSNpLIR3AxUlPoLJ7hC5lvir8B2WVqVEkJLwtixKAncVLasnTVjPDCidtAUTGEQw==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.16.tgz", + "integrity": "sha512-Os8ddfNBe7hmc5UMWZxygIHCyAqY0aWR8Wnp/aKbti3f8Df/r0J9ttMZIxeMjsFgtVjEryB0q7SGcwBsHk8WEw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^2.0.13", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.21.tgz", - "integrity": "sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.16.tgz", + "integrity": "sha512-rNhFIYRtrOrrhRlj6RL8jWA6/dcwrbGYAmy8+OAHjjzQ6zdzUBB1P+3IuJAgwWN6Y5GxI+mVXlM/pOjaoIgHow==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^2.0.16", - "@smithy/credential-provider-imds": "^2.0.18", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/property-provider": "^2.0.13", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/config-resolver": "^3.0.6", + "@smithy/credential-provider-imds": "^3.2.1", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/property-provider": "^3.1.4", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-endpoints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.2.tgz", - "integrity": "sha512-QEdq+sP68IJHAMVB2ugKVVZEWeKQtZLuf+akHzc8eTVElsZ2ZdVLWC6Cp+uKjJ/t4yOj1qu6ZzyxJQEQ8jdEjg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.0.tgz", + "integrity": "sha512-ilS7/0jcbS2ELdg0fM/4GVvOiuk8/U3bIFXUW25xE1Vh1Ol4DP6vVHQKqM40rCMizCLmJ9UxK+NeJrKlhI3HVA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-hex-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", - "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-middleware": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.5.tgz", - "integrity": "sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.4.tgz", + "integrity": "sha512-uSXHTBhstb1c4nHdmQEdkNMv9LiRNaJ/lWV2U/GO+5F236YFpdPw+hyWI9Zc0Rp9XKzwD9kVZvhZmEgp0UCVnA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-retry": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.5.tgz", - "integrity": "sha512-x3t1+MQAJ6QONk3GTbJNcugCFDVJ+Bkro5YqQQK1EyVesajNDqxFtCx9WdOFNGm/Cbm7tUdwVEmfKQOJoU2Vtw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.4.tgz", + "integrity": "sha512-JJr6g0tO1qO2tCQyK+n3J18r34ZpvatlFN5ULcLranFIBZPxqoivb77EPyNTVwTGMEvvq2qMnyjm4jMIxjdLFg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^2.0.5", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^3.0.4", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-stream": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.17.tgz", - "integrity": "sha512-fP/ZQ27rRvHsqItds8yB7jerwMpZFTL3QqbQbidUiG0+mttMoKdP0ZqnvM8UK5q0/dfc3/pN7g4XKPXOU7oRWw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.4.tgz", + "integrity": "sha512-txU3EIDLhrBZdGfon6E9V6sZz/irYnKFMblz4TLVjyq8hObNHNS2n9a2t7GIrl7d85zgEPhwLE0gANpZsvpsKg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/types": "^2.4.0", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/types": "^3.4.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-uri-escape": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", - "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-waiter": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.12.tgz", - "integrity": "sha512-3sENmyVa1NnOPoiT2NCApPmu7ukP7S/v7kL9IxNmnygkDldn7/yK0TP42oPJLwB2k3mospNsSePIlqdXEUyPHA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.3.tgz", + "integrity": "sha512-OU0YllH51/CxD8iyr3UHSMwYqTGTyuxFdCMH/0F978t+iDmJseC/ttrWPb22zmYkhkrjqtipzC1xaMuax5QKIA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.1.2", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@types/babel__core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", - "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -4287,18 +4557,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.5", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", - "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", - "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -4306,94 +4576,100 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", - "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "29.5.5", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", - "integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, "node_modules/@types/tough-cookie": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", - "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", - "dev": true + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/uuid": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz", - "integrity": "sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==", - "dev": true + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/abbrev": { @@ -4403,10 +4679,11 @@ "dev": true }, "node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -4465,6 +4742,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -4494,6 +4772,13 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4501,26 +4786,28 @@ "dev": true }, "node_modules/axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "node_modules/axios-cookiejar-support": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.7.tgz", - "integrity": "sha512-9vpE3y/a2l2Vs2XEJE4L2z0GWnlpJ4Xj+kDaoCtrpPfS1J3oikXBrxRJX6H62/ZcelOGe+519yW7mqXCIoPXuw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-5.0.2.tgz", + "integrity": "sha512-4KwFqiH62Ry/J+ue1NwqLvBSaK3Bp/Owc9jTe7BS9c22uN8/4MB5pY7HV9QwQjV3ZRonCoSj5V8Pjx911qQqAw==", "dev": true, + "license": "MIT", "dependencies": { - "http-cookie-agent": "^5.0.4" + "http-cookie-agent": "^6.0.5" }, "engines": { - "node": ">=14.18.0 <15.0.0 || >=16.0.0" + "node": ">=18.0.0" }, "funding": { "url": "https://github.com/sponsors/3846masa" @@ -4530,6 +4817,31 @@ "tough-cookie": ">=4.0.0" } }, + "node_modules/axios-cookiejar-support/node_modules/http-cookie-agent": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-6.0.5.tgz", + "integrity": "sha512-sfZ8fDgDP3B1YB+teqSnAK1aPgBu8reUUGxSsndP2XnYN6cM29EURXWXZqQQiaRdor3B4QjpkUNfv21syaO4DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/3846masa" + }, + "peerDependencies": { + "tough-cookie": "^4.0.0", + "undici": "^5.11.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "undici": { + "optional": true + } + } + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -4653,64 +4965,90 @@ } }, "node_modules/babel-plugin-module-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz", - "integrity": "sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz", + "integrity": "sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==", "dev": true, + "license": "MIT", "dependencies": { - "find-babel-config": "^2.0.0", - "glob": "^8.0.3", + "find-babel-config": "^2.1.1", + "glob": "^9.3.3", "pkg-up": "^3.1.0", "reselect": "^4.1.7", - "resolve": "^1.22.1" + "resolve": "^1.22.8" + } + }, + "node_modules/babel-plugin-module-resolver/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/babel-plugin-module-resolver/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 16" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", + "@babel/helper-define-polyfill-provider": "^0.6.2", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -4788,9 +5126,9 @@ "dev": true }, "node_modules/bootstrap": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", - "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", "dev": true, "funding": [ { @@ -4803,14 +5141,15 @@ } ], "peerDependencies": { - "@popperjs/core": "^2.11.6" + "@popperjs/core": "^2.11.8" } }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.1", @@ -4822,12 +5161,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -4837,12 +5177,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/browserslist": { - "version": "4.21.11", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz", - "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "funding": [ { @@ -4858,11 +5199,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001538", - "electron-to-chromium": "^1.4.526", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -4892,12 +5234,50 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bunyamin": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/bunyamin/-/bunyamin-1.6.3.tgz", + "integrity": "sha512-m1hAijFhu8pFiidsVc0XEDic46uxPK+mKNLqkb5mluNx0nTolNzx/DjwMqHChQWCgfOLMjKYJJ2uPTQLE6t4Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@flatten-js/interval-tree": "^1.1.2", + "multi-sort-stream": "^1.0.4", + "stream-json": "^1.7.5", + "trace-event-lib": "^1.3.1" + }, + "engines": { + "node": ">=14.18.2" + }, + "peerDependencies": { + "@types/bunyan": "^1.8.8", + "bunyan": "^1.8.15 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@types/bunyan": { + "optional": true + }, + "bunyan": { + "optional": true + } + } + }, "node_modules/bunyan": { "version": "1.8.15", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", @@ -4906,6 +5286,7 @@ "engines": [ "node >=0.10.0" ], + "license": "MIT", "bin": { "bunyan": "bin/bunyan" }, @@ -4921,6 +5302,7 @@ "resolved": "https://registry.npmjs.org/bunyan-debug-stream/-/bunyan-debug-stream-3.1.0.tgz", "integrity": "sha512-VaFYbDVdiSn3ZpdozrjZ8mFpxHXl26t11C1DKRQtbo0EgffqeFNrRLOGIESKVeGEvVu4qMxMSSxzNlSw7oTj7w==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2" }, @@ -4936,6 +5318,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4951,6 +5334,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4967,6 +5351,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4978,13 +5363,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bunyan-debug-stream/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4994,6 +5381,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5032,9 +5420,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001538", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", - "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", + "version": "1.0.30001649", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz", + "integrity": "sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==", "dev": true, "funding": [ { @@ -5049,13 +5437,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -5075,15 +5465,15 @@ } }, "node_modules/chart.js": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.2.1.tgz", - "integrity": "sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.2.tgz", + "integrity": "sha512-6GD7iKwFpP5kbSD4MeRRRlTnQvxfQREy36uEtm1hzHzcOqwWx0YEHuspuoNlslu+nciLIB7fjjsHkUv/FzFcOg==", "dev": true, "dependencies": { "@kurkle/color": "^0.3.0" }, "engines": { - "pnpm": "^7.0.0" + "pnpm": ">=8" } }, "node_modules/child-process-promise": { @@ -5098,9 +5488,9 @@ } }, "node_modules/ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -5156,9 +5546,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "node_modules/color-convert": { @@ -5166,6 +5556,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -5174,7 +5565,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -5189,12 +5581,13 @@ } }, "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", + "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/concat-map": { @@ -5204,18 +5597,19 @@ "dev": true }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/core-js-compat": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", - "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", + "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.21.10" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -5375,9 +5769,9 @@ } }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -5425,11 +5819,12 @@ } }, "node_modules/detox": { - "version": "20.11.4", - "resolved": "https://registry.npmjs.org/detox/-/detox-20.11.4.tgz", - "integrity": "sha512-P48KAtK8qIDOxJKUl4q/syPkuHz67kAeFlNodBZg5aO4hJiH+RsbEkQfJSYkTCeZV800EcmUQwZK2M5amLoYaw==", + "version": "20.26.2", + "resolved": "https://registry.npmjs.org/detox/-/detox-20.26.2.tgz", + "integrity": "sha512-pJU8WHD7GuoGlCuDzZxCD784mQfOO/ihRxe2/EebnesniWnV6FOwbC+32J1kGivhAdyvvPawfMQ7PoD4FwkxfA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "ajv": "^8.6.3", "bunyan": "^1.8.12", @@ -5437,12 +5832,14 @@ "caf": "^15.0.1", "chalk": "^4.0.0", "child-process-promise": "^2.2.0", + "detox-copilot": "^0.0.0", "execa": "^5.1.1", "find-up": "^5.0.0", "fs-extra": "^11.0.0", "funpermaproxy": "^1.1.0", "glob": "^8.0.3", "ini": "^1.3.4", + "jest-environment-emit": "^1.0.8", "json-cycle": "^1.3.0", "lodash": "^4.17.11", "multi-sort-stream": "^1.0.3", @@ -5470,7 +5867,7 @@ "detox": "local-cli/cli.js" }, "engines": { - "node": ">=14.5.0" + "node": ">=14" }, "peerDependencies": { "jest": "29.x.x || 28.x.x || ^27.2.5" @@ -5481,6 +5878,13 @@ } } }, + "node_modules/detox-copilot": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/detox-copilot/-/detox-copilot-0.0.0.tgz", + "integrity": "sha512-BasCw/JXlplL1UZfe19xJYT0i0JU4tdGPWutsmybGy6166Jvj2ryikbgoE1ls44F+41p9Y0Yei0cdBC7KawXeQ==", + "dev": true, + "license": "MIT" + }, "node_modules/detox/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5598,9 +6002,9 @@ } }, "node_modules/detox/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5649,9 +6053,9 @@ } }, "node_modules/diff2html": { - "version": "3.4.43", - "resolved": "https://registry.npmjs.org/diff2html/-/diff2html-3.4.43.tgz", - "integrity": "sha512-cBiJKvyhY3bv+q9VHA7YyNdPk1PA+P9lArpp0MJlcpn1x4eiXYtK3ILNpcHXfgPTCdjjCilGvX9qBelGWtyMCg==", + "version": "3.4.48", + "resolved": "https://registry.npmjs.org/diff2html/-/diff2html-3.4.48.tgz", + "integrity": "sha512-1lzNSg0G0VPKZPTyi4knzV2nAWTXBy/QaWCKzDto6iEIlcuOJEG0li4bElJfpHNz+pBqPu4AcC1i9ZCo9KMUOg==", "dev": true, "dependencies": { "diff": "5.1.0", @@ -5661,7 +6065,7 @@ "node": ">=12" }, "optionalDependencies": { - "highlight.js": "11.8.0" + "highlight.js": "11.9.0" } }, "node_modules/dtrace-provider": { @@ -5670,6 +6074,7 @@ "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", "dev": true, "hasInstallScript": true, + "license": "BSD-2-Clause", "optional": true, "dependencies": { "nan": "^2.14.0" @@ -5692,15 +6097,33 @@ "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { - "version": "1.4.527", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.527.tgz", - "integrity": "sha512-EafxEiEDzk2aLrdbtVczylHflHdHkNrpGNHIgDyA63sUQLQVS2ayj2hPw3RsVB42qkwURH+T2OxV7kGPUuYszA==", - "dev": true + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", @@ -5730,9 +6153,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -5743,6 +6166,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -5774,10 +6198,20 @@ "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", "dev": true, + "license": "Unlicense", "engines": { "node": ">=4.0.0" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -5830,6 +6264,16 @@ "node": ">= 8" } }, + "node_modules/exeunt": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/exeunt/-/exeunt-1.1.0.tgz", + "integrity": "sha512-dd++Yn/0Fp+gtJ04YHov7MeAii+LFivJc6KqnJNfplzLVUkUDrfKoQDTLlCgzcW15vY5hKlHasWeIsQJ8agHsw==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=0.10" + } + }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -5862,10 +6306,11 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5884,20 +6329,21 @@ "dev": true }, "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "dev": true, "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -5906,10 +6352,11 @@ } }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -5923,11 +6370,22 @@ "bser": "2.1.1" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5936,16 +6394,13 @@ } }, "node_modules/find-babel-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.0.0.tgz", - "integrity": "sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.1.1.tgz", + "integrity": "sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA==", "dev": true, "dependencies": { - "json5": "^2.1.1", + "json5": "^2.2.3", "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" } }, "node_modules/find-up": { @@ -5971,9 +6426,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -6005,9 +6460,9 @@ } }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -6025,9 +6480,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -6039,16 +6494,20 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/funpermaproxy": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/funpermaproxy/-/funpermaproxy-1.1.0.tgz", "integrity": "sha512-2Sp1hWuO8m5fqeFDusyhKqYPT+7rGLw34N3qonDcdRP8+n7M7Gl/yKp/q7oCxnnJ6pWCectOmLFJpsMU/++KrQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8.3.0" } @@ -6116,6 +6575,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -6133,36 +6593,37 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/highlight.js": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz", - "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==", + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", "dev": true, "optional": true, "engines": { @@ -6204,34 +6665,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/http-cookie-agent": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz", - "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.0" - }, - "engines": { - "node": ">=14.18.0 <15.0.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/3846masa" - }, - "peerDependencies": { - "deasync": "^0.1.26", - "tough-cookie": "^4.0.0", - "undici": "^5.11.0" - }, - "peerDependenciesMeta": { - "deasync": { - "optional": true - }, - "undici": { - "optional": true - } - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -6242,10 +6675,24 @@ } }, "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/import-local": { "version": "3.1.0", @@ -6306,15 +6753,6 @@ "node": ">= 0.10" } }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -6322,12 +6760,12 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6353,6 +6791,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6380,6 +6819,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -6392,6 +6832,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -6442,9 +6883,9 @@ "dev": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" @@ -6467,17 +6908,17 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/has-flag": { @@ -6516,9 +6957,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -6528,6 +6969,125 @@ "node": ">=8" } }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -7112,6 +7672,72 @@ "node": ">=8" } }, + "node_modules/jest-environment-emit": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/jest-environment-emit/-/jest-environment-emit-1.0.8.tgz", + "integrity": "sha512-WNqvxBLH0yNojHJQ99Y21963aT7UTavxV3PgiBQFi8zwrlnKU6HvkB6LOvQrbk5I8mI8JEKvcoOrQOvBVMLIXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bunyamin": "^1.5.2", + "bunyan": "^2.0.5", + "bunyan-debug-stream": "^3.1.0", + "funpermaproxy": "^1.1.0", + "lodash.merge": "^4.6.2", + "node-ipc": "9.2.1", + "strip-ansi": "^6.0.0", + "tslib": "^2.5.3" + }, + "engines": { + "node": ">=16.14.0" + }, + "peerDependencies": { + "@jest/environment": ">=27.2.5", + "@jest/types": ">=27.2.5", + "jest": ">=27.2.5", + "jest-environment-jsdom": ">=27.2.5", + "jest-environment-node": ">=27.2.5" + }, + "peerDependenciesMeta": { + "@jest/environment": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "jest-environment-node": { + "optional": true + } + } + }, + "node_modules/jest-environment-emit/node_modules/bunyan": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-2.0.5.tgz", + "integrity": "sha512-Jvl74TdxCN6rSP9W1I6+UOUtwslTDqsSFkDqZlFb/ilaSvQ+bZAnXT/GT97IZ5L+Vph0joPZPhxUyn6FLNmFAA==", + "dev": true, + "engines": [ + "node >=0.10.0" + ], + "license": "MIT", + "dependencies": { + "exeunt": "1.1.0" + }, + "bin": { + "bunyan": "bin/bunyan" + }, + "optionalDependencies": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, "node_modules/jest-environment-node": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", @@ -7164,10 +7790,11 @@ } }, "node_modules/jest-html-reporters": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/jest-html-reporters/-/jest-html-reporters-3.1.4.tgz", - "integrity": "sha512-7lLrKDKDNBNDprd5lP241HRx2mRXb/XQOuYFxX/MxydgHtYRE/lEtK2+J5XLiNTs9JL/rUjWsWhIBOBs9j3wcg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/jest-html-reporters/-/jest-html-reporters-3.1.7.tgz", + "integrity": "sha512-GTmjqK6muQ0S0Mnksf9QkL9X9z2FGIpNSxC52E0PHDzjPQ1XDu2+XTI3B3FS43ZiUzD1f354/5FfwbNIBzT7ew==", "dev": true, + "license": "MIT", "dependencies": { "fs-extra": "^10.0.0", "open": "^8.0.3" @@ -7891,9 +8518,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7924,10 +8551,11 @@ "dev": true }, "node_modules/jest-stare": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jest-stare/-/jest-stare-2.5.1.tgz", - "integrity": "sha512-++3JWdY2zJNPFCN6ao1oeW0Qg8oKVYT9XaMUr8RaNDHDGKOQMNjmMrVz9E/4E43ZDU2mPTtk9U8pS+KjSuxPKg==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jest-stare/-/jest-stare-2.5.2.tgz", + "integrity": "sha512-dvxHXOsiJlvBi0n2dK9pz6RWFTdPB6njc2ZoMpyjmWI+aIL+X1W8OW5mTm1pkv/quy2ocKO/G+GsTe7Bv07xkQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/reporters": "^29.0.0", "@jest/test-result": "^29.0.0", @@ -8338,9 +8966,9 @@ } }, "node_modules/jquery": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.3.tgz", - "integrity": "sha512-bZ5Sy3YzKo9Fyc8wH2iIQK4JImJ6R0GWI9kL1/k7Z91ZBNgkRXE6U0JfHIizZbort8ZunhSI3jw9I6253ahKfg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", "dev": true }, "node_modules/js-message": { @@ -8348,6 +8976,7 @@ "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0" } @@ -8357,6 +8986,7 @@ "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", "dev": true, + "license": "MIT", "dependencies": { "easy-stack": "^1.0.1" }, @@ -8368,7 +8998,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.1", @@ -8396,9 +9027,9 @@ } }, "node_modules/json-cycle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.3.0.tgz", - "integrity": "sha512-FD/SedD78LCdSvJaOUQAXseT8oQBb5z6IVYaQaCrVUlu9zOAr1BDdKyVYQaSD/GDsAMrXpKcOyBD4LIl8nfjHw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.5.0.tgz", + "integrity": "sha512-GOehvd5PO2FeZ5T4c+RxobeT5a1PiGpF4u9/3+UvrMU4bhnVqzJY7hm39wg8PDCqkU91fWGH8qjWR4bn+wgq9w==", "dev": true, "engines": { "node": ">= 4" @@ -8441,13 +9072,14 @@ } }, "node_modules/junit-report-merger": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/junit-report-merger/-/junit-report-merger-6.0.2.tgz", - "integrity": "sha512-Jk9PXeaJhbgo3aUNza2r24JgxYzLUtCk2kwrub8fbmDuWUdXhT/nfbM2MlU3JQiFbjVud1bzBWdzr9/GGBWfmA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/junit-report-merger/-/junit-report-merger-7.0.0.tgz", + "integrity": "sha512-i7IYPpwVFpju+UKdxYIG9UTMb6NjfRGzWzE/lRExdEf4K3agqXtVBnJWhL9aMM2lNX7uWW/rhVidiDBsG4n5cw==", "dev": true, + "license": "MIT", "dependencies": { - "commander": "~10.0.0", - "fast-glob": "~3.2.11", + "commander": "~12.0.0", + "fast-glob": "~3.3.0", "xmlbuilder2": "3.1.1" }, "bin": { @@ -8455,7 +9087,7 @@ "junit-report-merger": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/kleur": { @@ -8512,6 +9144,13 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -8522,20 +9161,53 @@ } }, "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -8571,17 +9243,19 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -8631,15 +9305,26 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -8653,19 +9338,20 @@ } }, "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "dev": true, "engines": { "node": "*" } }, "node_modules/moment-timezone": { - "version": "0.5.43", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", - "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", "dev": true, + "license": "MIT", "dependencies": { "moment": "^2.29.4" }, @@ -8683,7 +9369,8 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/multi-sort-stream/-/multi-sort-stream-1.0.4.tgz", "integrity": "sha512-hAZ8JOEQFbgdLe8HWZbb7gdZg0/yAIHF00Qfo3kd0rXFv96nXe+/bPTrKHZ2QMHugGX4FiAyET1Lt+jiB+7Qlg==", - "dev": true + "dev": true, + "license": "bsd" }, "node_modules/multipipe": { "version": "4.0.0", @@ -8709,6 +9396,7 @@ "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "mkdirp": "~0.5.1", @@ -8724,6 +9412,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "minimist": "^1.2.6" @@ -8733,10 +9422,11 @@ } }, "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", + "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/natural-compare": { @@ -8750,6 +9440,7 @@ "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", "dev": true, + "license": "MIT", "optional": true, "bin": { "ncp": "bin/ncp" @@ -8766,6 +9457,7 @@ "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz", "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", "dev": true, + "license": "MIT", "dependencies": { "event-pubsub": "4.3.0", "js-message": "1.0.7", @@ -8776,10 +9468,11 @@ } }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" }, "node_modules/node-version": { "version": "1.2.0", @@ -8860,9 +9553,9 @@ } }, "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "dependencies": { "define-lazy-prop": "^2.0.0", @@ -8978,11 +9671,46 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -8997,9 +9725,9 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" @@ -9102,19 +9830,22 @@ } }, "node_modules/popsicle": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-12.1.0.tgz", - "integrity": "sha512-muNC/cIrWhfR6HqqhHazkxjob3eyECBe8uZYSQ/N5vixNAgssacVleerXnE8Are5fspR0a+d2qWaBR1g7RYlmw==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-12.1.2.tgz", + "integrity": "sha512-xE2vEUa15TiHvFhGmKTtdKk9aSLL5CHX8Vw5kHfVM3R0YHiaTon6Ybsamw0XYqMR+Ng2RijX88iYUKPBMpLBww==", "dev": true, "dependencies": { "popsicle-content-encoding": "^1.0.0", - "popsicle-cookie-jar": "^1.0.0", + "popsicle-cookie-jar": "^1.0.1", "popsicle-redirects": "^1.1.0", - "popsicle-transport-http": "^1.0.8", + "popsicle-transport-http": "^1.1.0", "popsicle-transport-xhr": "^2.0.0", "popsicle-user-agent": "^1.0.0", "servie": "^4.3.3", "throwback": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/popsicle-content-encoding": { @@ -9127,38 +9858,47 @@ } }, "node_modules/popsicle-cookie-jar": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/popsicle-cookie-jar/-/popsicle-cookie-jar-1.0.0.tgz", - "integrity": "sha512-vrlOGvNVELko0+J8NpGC5lHWDGrk8LQJq9nwAMIVEVBfN1Lib3BLxAaLRGDTuUnvl45j5N9dT2H85PULz6IjjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/popsicle-cookie-jar/-/popsicle-cookie-jar-1.0.1.tgz", + "integrity": "sha512-QVIZhADP8nDbXIQW6wq8GU9IOSE8INUACO/9KD9TFKQ7qq8r/y3qUDz59xIi6p6TH19lCJJyBAPSXP1liIoySw==", "dev": true, "dependencies": { - "@types/tough-cookie": "^2.3.5", - "tough-cookie": "^3.0.1" + "@types/tough-cookie": "^4.0.2", + "tough-cookie": "^4.1.3" + }, + "engines": { + "node": ">=8" }, "peerDependencies": { "servie": "^4.0.0" } }, - "node_modules/popsicle-cookie-jar/node_modules/@types/tough-cookie": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.8.tgz", - "integrity": "sha512-7axfYN8SW9pWg78NgenHasSproWQee5rzyPVLC9HpaQSDgNArsnKJD88EaMfi4Pl48AyciO3agYCFqpHS1gLpg==", - "dev": true - }, "node_modules/popsicle-cookie-jar/node_modules/tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { "node": ">=6" } }, + "node_modules/popsicle-cookie-jar/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/popsicle-redirects": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/popsicle-redirects/-/popsicle-redirects-1.1.1.tgz", @@ -9276,21 +10016,22 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -9307,7 +10048,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -9327,7 +10069,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/react-is": { "version": "18.2.0", @@ -9336,9 +10079,9 @@ "dev": true }, "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -9409,9 +10152,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -9421,16 +10164,18 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } @@ -9495,21 +10240,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", "dev": true }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -9564,6 +10310,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -9573,7 +10320,9 @@ "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "optional": true, "dependencies": { "glob": "^6.0.1" @@ -9587,6 +10336,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "balanced-match": "^1.0.0", @@ -9597,7 +10347,9 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "optional": true, "dependencies": { "inflight": "^1.0.4", @@ -9615,6 +10367,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "optional": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -9642,6 +10395,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -9671,6 +10425,7 @@ "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/sanitize-filename": { @@ -9683,15 +10438,15 @@ } }, "node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", "dev": true }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -9757,9 +10512,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9919,13 +10674,15 @@ "version": "2.2.5", "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stream-json": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.7.5.tgz", - "integrity": "sha512-NSkoVduGakxZ8a+pTPUlcGEeAGQpWL9rKJhOFCV+J/QtdQUEU5vtBgVg6eJXn8JB8RZvpbJWZGvXkhz70MLWoA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", + "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "stream-chain": "^2.2.5" } @@ -10018,13 +10775,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -10151,6 +10910,26 @@ "integrity": "sha512-dLFe8bU8SeH0xeqeKL7BNo8XoPC/o91nz9/ooeplZPiso+DZukhoyZcSz9TFnUNScm+cA9qjU1m1853M6sPOng==", "dev": true }, + "node_modules/tldts": { + "version": "6.1.44", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.44.tgz", + "integrity": "sha512-Id5Kq3vy4fAHgrMasofrYZ4ghMa9rX64BfstBFgnGN+CAPdXYeZ0xWA2BXk3F+VgS+/jJ9PdYEQrP8LEZvGrCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.44" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.44", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.44.tgz", + "integrity": "sha512-DMOTcn8pGmuY65zDPH+M1xAOVtBj7Phrah0HxuspKEu33hOArCDmk3R4UEVymtuN+HveeUlVgX0+RNf4mFkoAw==", + "dev": true, + "license": "MIT" + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -10171,6 +10950,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -10179,37 +10959,26 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" + "node": ">=16" } }, "node_modules/trace-event-lib": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/trace-event-lib/-/trace-event-lib-1.3.1.tgz", - "integrity": "sha512-RO/TD5E9RNqU6MhOfi/njFWKYhrzOJCpRXlEQHgXwM+6boLSrQnOZ9xbHwOXzC+Luyixc7LNNSiTsqTVeF7I1g==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/trace-event-lib/-/trace-event-lib-1.4.1.tgz", + "integrity": "sha512-TOgFolKG8JFY+9d5EohGWMvwvteRafcyfPWWNIqcuD1W/FUvxWcy2MSCZ/beYHM63oYPHYHCd3tkbgCctHVP7w==", "dev": true, + "license": "MIT", "dependencies": { - "browser-process-hrtime": "^1.0.0", - "lodash": "^4.17.21" + "browser-process-hrtime": "^1.0.0" }, "engines": { "node": ">=12.0.0" @@ -10231,28 +11000,31 @@ "dev": true }, "node_modules/ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", "jest-util": "^29.0.0", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", @@ -10262,6 +11034,9 @@ "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -10273,26 +11048,12 @@ } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -10300,17 +11061,12 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" }, "node_modules/type-detect": { "version": "4.0.8", @@ -10334,10 +11090,11 @@ } }, "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10346,6 +11103,12 @@ "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -10387,18 +11150,18 @@ } }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { "node": ">= 10.0.0" } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -10414,9 +11177,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -10439,6 +11203,7 @@ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -10457,27 +11222,28 @@ "dev": true }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" @@ -10574,10 +11340,11 @@ } }, "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -10718,8062 +11485,5 @@ "url": "https://github.com/sponsors/sindresorhus" } } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "dev": true, - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", - "dev": true, - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "dev": true, - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", - "dev": true, - "requires": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "dev": true, - "requires": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "dev": true, - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "dev": true, - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-sdk/client-s3": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.445.0.tgz", - "integrity": "sha512-2G+3MnO78irZRjlfkdvtlKRQ3yuOfrRMg8mztKpMw0q/9WHtwCcmaUUpl1bXwJ+BcNTVHopLQXdbzCeaxxI92w==", - "dev": true, - "requires": { - "@aws-crypto/sha1-browser": "3.0.0", - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.445.0", - "@aws-sdk/core": "3.445.0", - "@aws-sdk/credential-provider-node": "3.445.0", - "@aws-sdk/middleware-bucket-endpoint": "3.433.0", - "@aws-sdk/middleware-expect-continue": "3.433.0", - "@aws-sdk/middleware-flexible-checksums": "3.433.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-location-constraint": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-sdk-s3": "3.440.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-ssec": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/signature-v4-multi-region": "3.437.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@aws-sdk/xml-builder": "3.310.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/eventstream-serde-browser": "^2.0.12", - "@smithy/eventstream-serde-config-resolver": "^2.0.12", - "@smithy/eventstream-serde-node": "^2.0.12", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-blob-browser": "^2.0.12", - "@smithy/hash-node": "^2.0.12", - "@smithy/hash-stream-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/md5-js": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-stream": "^2.0.17", - "@smithy/util-utf8": "^2.0.0", - "@smithy/util-waiter": "^2.0.12", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sso": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.445.0.tgz", - "integrity": "sha512-me4LvqNnu6kxi+sW7t0AgMv1Yi64ikas0x2+5jv23o6Csg32w0S0xOjCTKQYahOA5CMFunWvlkFIfxbqs+Uo7w==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.445.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sts": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.445.0.tgz", - "integrity": "sha512-ogbdqrS8x9O5BTot826iLnTQ6i4/F5BSi/74gycneCxYmAnYnyUBNOWVnynv6XZiEWyDJQCU2UtMd52aNGW1GA==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.445.0", - "@aws-sdk/credential-provider-node": "3.445.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-sdk-sts": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-utf8": "^2.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/core": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.445.0.tgz", - "integrity": "sha512-6GYLElUG1QTOdmXG8zXa+Ull9IUeSeItKDYHKzHYfIkbsagMfYlf7wm9XIYlatjtgodNfZ3gPHAJfRyPmwKrsg==", - "dev": true, - "requires": { - "@smithy/smithy-client": "^2.1.12", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.433.0.tgz", - "integrity": "sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.445.0.tgz", - "integrity": "sha512-R7IYSGjNZ5KKJwQJ2HNPemjpAMWvdce91i8w+/aHfqeGfTXrmYJu99PeGRyyBTKEumBaojyjTRvmO8HzS+/l7g==", - "dev": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.433.0", - "@aws-sdk/credential-provider-process": "3.433.0", - "@aws-sdk/credential-provider-sso": "3.445.0", - "@aws-sdk/credential-provider-web-identity": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.445.0.tgz", - "integrity": "sha512-zI4k4foSjQRKNEsouculRcz7IbLfuqdFxypDLYwn+qPNMqJwWJ7VxOOeBSPUpHFcd7CLSfbHN2JAhQ7M02gPTA==", - "dev": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.433.0", - "@aws-sdk/credential-provider-ini": "3.445.0", - "@aws-sdk/credential-provider-process": "3.433.0", - "@aws-sdk/credential-provider-sso": "3.445.0", - "@aws-sdk/credential-provider-web-identity": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.433.0.tgz", - "integrity": "sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.445.0.tgz", - "integrity": "sha512-gJz7kAiDecdhtApgXnxfZsXKsww8BnifDF9MAx9Dr4X6no47qYsCCS3XPuEyRiF9VebXvHOH0H260Zp3bVyniQ==", - "dev": true, - "requires": { - "@aws-sdk/client-sso": "3.445.0", - "@aws-sdk/token-providers": "3.438.0", - "@aws-sdk/types": "3.433.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.433.0.tgz", - "integrity": "sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/lib-storage": { - "version": "3.445.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.445.0.tgz", - "integrity": "sha512-sCP3lh71oMkx/B3+tSOGr81cff1Z1Yy5ejh5xa/YuH6OefQUFBM7/EC0CJiNfVXemh3D6O+biKETL+t2rAiZoQ==", - "dev": true, - "requires": { - "@smithy/abort-controller": "^2.0.1", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/smithy-client": "^2.1.12", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", - "tslib": "^2.5.0" - }, - "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - } - } - }, - "@aws-sdk/middleware-bucket-endpoint": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.433.0.tgz", - "integrity": "sha512-Lk1xIu2tWTRa1zDw5hCF1RrpWQYSodUhrS/q3oKz8IAoFqEy+lNaD5jx+fycuZb5EkE4IzWysT+8wVkd0mAnOg==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-arn-parser": "3.310.0", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "@smithy/util-config-provider": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-expect-continue": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.433.0.tgz", - "integrity": "sha512-Uq2rPIsjz0CR2sulM/HyYr5WiqiefrSRLdwUZuA7opxFSfE808w5DBWSprHxbH3rbDSQR4nFiOiVYIH8Eth7nA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-flexible-checksums": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.433.0.tgz", - "integrity": "sha512-Ptssx373+I7EzFUWjp/i/YiNFt6I6sDuRHz6DOUR9nmmRTlHHqmdcBXlJL2d9wwFxoBRCN8/PXGsTc/DJ4c95Q==", - "dev": true, - "requires": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.433.0", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.433.0.tgz", - "integrity": "sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-location-constraint": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.433.0.tgz", - "integrity": "sha512-2YD860TGntwZifIUbxm+lFnNJJhByR/RB/+fV1I8oGKg+XX2rZU+94pRfHXRywoZKlCA0L+LGDA1I56jxrB9sw==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.433.0.tgz", - "integrity": "sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.433.0.tgz", - "integrity": "sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-sdk-s3": { - "version": "3.440.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.440.0.tgz", - "integrity": "sha512-DVTSr+82Z8jR9xTwDN3YHzxX7qvi0n96V92OfxvSRDq2BldCEx/KEL1orUZjw97SAXhINOlUWjRR7j4HpwWQtQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-arn-parser": "3.310.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-sdk-sts": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.433.0.tgz", - "integrity": "sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==", - "dev": true, - "requires": { - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-signing": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.433.0.tgz", - "integrity": "sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.4.0", - "@smithy/util-middleware": "^2.0.5", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-ssec": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.433.0.tgz", - "integrity": "sha512-2AMaPx0kYfCiekxoL7aqFqSSoA9du+yI4zefpQNLr+1cZOerYiDxdsZ4mbqStR1CVFaX6U6hrYokXzjInsvETw==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.438.0.tgz", - "integrity": "sha512-a+xHT1wOxT6EA6YyLmrfaroKWOkwwyiktUfXKM0FsUutGzNi4fKhb5NZ2al58NsXzHgHFrasSDp+Lqbd/X2cEw==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/region-config-resolver": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.433.0.tgz", - "integrity": "sha512-xpjRjCZW+CDFdcMmmhIYg81ST5UAnJh61IHziQEk0FXONrg4kjyYPZAOjEdzXQ+HxJQuGQLKPhRdzxmQnbX7pg==", - "dev": true, - "requires": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/signature-v4-multi-region": { - "version": "3.437.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.437.0.tgz", - "integrity": "sha512-MmrqudssOs87JgVg7HGVdvJws/t4kcOrJJd+975ki+DPeSoyK2U4zBDfDkJ+n0tFuZBs3sLwLh0QXE7BV28rRA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/token-providers": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.438.0.tgz", - "integrity": "sha512-G2fUfTtU6/1ayYRMu0Pd9Ln4qYSvwJOWCqJMdkDgvXSwdgcOSOLsnAIk1AHGJDAvgLikdCzuyOsdJiexr9Vnww==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/types": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.433.0.tgz", - "integrity": "sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-arn-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", - "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.438.0.tgz", - "integrity": "sha512-6VyPTq1kN3GWxwFt5DdZfOsr6cJZPLjWh0troY/0uUv3hK74C9o3Y0Xf/z8UAUvQFkVqZse12O0/BgPVMImvfA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/util-endpoints": "^1.0.2", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.433.0.tgz", - "integrity": "sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.437.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.437.0.tgz", - "integrity": "sha512-JVEcvWaniamtYVPem4UthtCNoTBCfFTwYj7Y3CrWZ2Qic4TqrwLkAfaBGtI2TGrhIClVr77uzLI6exqMTN7orA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.433.0", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/xml-builder": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", - "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - } - }, - "@babel/compat-data": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", - "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", - "dev": true - }, - "@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", - "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", - "dev": true, - "requires": { - "@babel/types": "^7.22.15" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.15" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", - "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - } - }, - "@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", - "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" - } - }, - "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", - "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", - "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", - "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", - "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", - "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", - "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz", - "integrity": "sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz", - "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.20", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.15", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.15", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.15", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-modules-systemjs": "^7.22.11", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.22.15", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.19", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.14.0" - } - }, - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - }, - "@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - } - }, - "@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "requires": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - } - }, - "@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3" - } - }, - "@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - } - }, - "@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "requires": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@oozcitak/dom": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", - "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", - "dev": true, - "requires": { - "@oozcitak/infra": "1.0.8", - "@oozcitak/url": "1.0.4", - "@oozcitak/util": "8.3.8" - } - }, - "@oozcitak/infra": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.8.tgz", - "integrity": "sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==", - "dev": true, - "requires": { - "@oozcitak/util": "8.3.8" - } - }, - "@oozcitak/url": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.4.tgz", - "integrity": "sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==", - "dev": true, - "requires": { - "@oozcitak/infra": "1.0.8", - "@oozcitak/util": "8.3.8" - } - }, - "@oozcitak/util": { - "version": "8.3.8", - "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", - "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", - "dev": true - }, - "@popperjs/core": { - "version": "2.11.6", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", - "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", - "dev": true, - "peer": true - }, - "@servie/events": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@servie/events/-/events-1.0.0.tgz", - "integrity": "sha512-sBSO19KzdrJCM3gdx6eIxV8M9Gxfgg6iDQmH5TIAGaUu+X9VDdsINXJOnoiZ1Kx3TrHdH4bt5UVglkjsEGBcvw==", - "dev": true - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@smithy/abort-controller": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.12.tgz", - "integrity": "sha512-YIJyefe1mi3GxKdZxEBEuzYOeQ9xpYfqnFmWzojCssRAuR7ycxwpoRQgp965vuW426xUAQhCV5rCaWElQ7XsaA==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/chunked-blob-reader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", - "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/chunked-blob-reader-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", - "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", - "dev": true, - "requires": { - "@smithy/util-base64": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/config-resolver": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.16.tgz", - "integrity": "sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ==", - "dev": true, - "requires": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", - "tslib": "^2.5.0" - } - }, - "@smithy/credential-provider-imds": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.18.tgz", - "integrity": "sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g==", - "dev": true, - "requires": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/property-provider": "^2.0.13", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "tslib": "^2.5.0" - } - }, - "@smithy/eventstream-codec": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.12.tgz", - "integrity": "sha512-ZZQLzHBJkbiAAdj2C5K+lBlYp/XJ+eH2uy+jgJgYIFW/o5AM59Hlj7zyI44/ZTDIQWmBxb3EFv/c5t44V8/g8A==", - "dev": true, - "requires": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.4.0", - "@smithy/util-hex-encoding": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/eventstream-serde-browser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.12.tgz", - "integrity": "sha512-0pi8QlU/pwutNshoeJcbKR1p7Ie5STd8UFAMX5xhSoSJjNlxIv/OsHbF023jscMRN2Prrqd6ToGgdCnsZVQjvg==", - "dev": true, - "requires": { - "@smithy/eventstream-serde-universal": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/eventstream-serde-config-resolver": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.12.tgz", - "integrity": "sha512-I0XfwQkIX3gAnbrU5rLMkBSjTM9DHttdbLwf12CXmj7SSI5dT87PxtKLRrZGanaCMbdf2yCep+MW5/4M7IbvQA==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/eventstream-serde-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.12.tgz", - "integrity": "sha512-vf1vMHGOkG3uqN9x1zKOhnvW/XgvhJXWqjV6zZiT2FMjlEayugQ1mzpSqr7uf89+BzjTzuZKERmOsEAmewLbxw==", - "dev": true, - "requires": { - "@smithy/eventstream-serde-universal": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/eventstream-serde-universal": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.12.tgz", - "integrity": "sha512-xZ3ZNpCxIND+q+UCy7y1n1/5VQEYicgSTNCcPqsKawX+Vd+6OcFX7gUHMyPzL8cZr+GdmJuxNleqHlH4giK2tw==", - "dev": true, - "requires": { - "@smithy/eventstream-codec": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/fetch-http-handler": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.4.tgz", - "integrity": "sha512-gIPRFEGi+c6V52eauGKrjDzPWF2Cu7Z1r5F8A3j2wcwz25sPG/t8kjsbEhli/tS/2zJp/ybCZXe4j4ro3yv/HA==", - "dev": true, - "requires": { - "@smithy/protocol-http": "^3.0.8", - "@smithy/querystring-builder": "^2.0.12", - "@smithy/types": "^2.4.0", - "@smithy/util-base64": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/hash-blob-browser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.12.tgz", - "integrity": "sha512-riLnV16f27yyePX8UF0deRHAeccUK8SrOxyTykSTrnVkgS3DsjNapZtTbd8OGNKEbI60Ncdb5GwN3rHZudXvog==", - "dev": true, - "requires": { - "@smithy/chunked-blob-reader": "^2.0.0", - "@smithy/chunked-blob-reader-native": "^2.0.0", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/hash-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.12.tgz", - "integrity": "sha512-fDZnTr5j9t5qcbeJ037aMZXxMka13Znqwrgy3PAqYj6Dm3XHXHftTH3q+NWgayUxl1992GFtQt1RuEzRMy3NnQ==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/hash-stream-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.12.tgz", - "integrity": "sha512-x/DrSynPKrW0k00q7aZ/vy531a3mRw79mOajHp+cIF0TrA1SqEMFoy/B8X0XtoAtlJWt/vvgeDNqt/KAeaAqMw==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/invalid-dependency": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.12.tgz", - "integrity": "sha512-p5Y+iMHV3SoEpy3VSR7mifbreHQwVSvHSAz/m4GdoXfOzKzaYC8hYv10Ks7Deblkf7lhas8U+lAp9ThbBM+ZXA==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/is-array-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", - "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/md5-js": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.12.tgz", - "integrity": "sha512-OgDt+Xnrw+W5z3MSl5KZZzebqmXrYl9UdbCiBYnnjErmNywwSjV6QB/Oic3/7hnsPniSU81n7Rvlhz2kH4EREQ==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-content-length": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.14.tgz", - "integrity": "sha512-poUNgKTw9XwPXfX9nEHpVgrMNVpaSMZbshqvPxFVoalF4wp6kRzYKOfdesSVectlQ51VtigoLfbXcdyPwvxgTg==", - "dev": true, - "requires": { - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-endpoint": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.3.tgz", - "integrity": "sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ==", - "dev": true, - "requires": { - "@smithy/middleware-serde": "^2.0.12", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.2.2", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-middleware": "^2.0.5", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-retry": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.18.tgz", - "integrity": "sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA==", - "dev": true, - "requires": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/protocol-http": "^3.0.8", - "@smithy/service-error-classification": "^2.0.5", - "@smithy/types": "^2.4.0", - "@smithy/util-middleware": "^2.0.5", - "@smithy/util-retry": "^2.0.5", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "@smithy/middleware-serde": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.12.tgz", - "integrity": "sha512-IBeco157lIScecq2Z+n0gq56i4MTnfKxS7rbfrAORveDJgnbBAaEQgYqMqp/cYqKrpvEXcyTjwKHrBjCCIZh2A==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-stack": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.6.tgz", - "integrity": "sha512-YSvNZeOKWLJ0M/ycxwDIe2Ztkp6Qixmcml1ggsSv2fdHKGkBPhGrX5tMzPGMI1yyx55UEYBi2OB4s+RriXX48A==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/node-config-provider": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.3.tgz", - "integrity": "sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ==", - "dev": true, - "requires": { - "@smithy/property-provider": "^2.0.13", - "@smithy/shared-ini-file-loader": "^2.2.2", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/node-http-handler": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.8.tgz", - "integrity": "sha512-KZylM7Wff/So5SmCiwg2kQNXJ+RXgz34wkxS7WNwIUXuZrZZpY/jKJCK+ZaGyuESDu3TxcaY+zeYGJmnFKbQsA==", - "dev": true, - "requires": { - "@smithy/abort-controller": "^2.0.12", - "@smithy/protocol-http": "^3.0.8", - "@smithy/querystring-builder": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/property-provider": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.13.tgz", - "integrity": "sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/protocol-http": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.8.tgz", - "integrity": "sha512-SHJvYeWq8q0FK8xHk+xjV9dzDUDjFMT+G1pZbV+XB6OVoac/FSVshlMNPeUJ8AmSkcDKHRu5vASnRqZHgD3qhw==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/querystring-builder": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.12.tgz", - "integrity": "sha512-cDbF07IuCjiN8CdGvPzfJjXIrmDSelScRfyJYrYBNBbKl2+k7QD/KqiHhtRyEKgID5mmEVrV6KE6L/iPJ98sFw==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "@smithy/util-uri-escape": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/querystring-parser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.12.tgz", - "integrity": "sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/service-error-classification": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.5.tgz", - "integrity": "sha512-M0SeJnEgD2ywJyV99Fb1yKFzmxDe9JfpJiYTVSRMyRLc467BPU0qsuuDPzMCdB1mU8M8u1rVOdkqdoyFN8UFTw==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0" - } - }, - "@smithy/shared-ini-file-loader": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.2.tgz", - "integrity": "sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/signature-v4": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.12.tgz", - "integrity": "sha512-6Kc2lCZEVmb1nNYngyNbWpq0d82OZwITH11SW/Q0U6PX5fH7B2cIcFe7o6eGEFPkTZTP8itTzmYiGcECL0D0Lw==", - "dev": true, - "requires": { - "@smithy/eventstream-codec": "^2.0.12", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.4.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", - "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/smithy-client": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.12.tgz", - "integrity": "sha512-XXqhridfkKnpj+lt8vM6HRlZbqUAqBjVC74JIi13F/AYQd/zTj9SOyGfxnbp4mjY9q28LityxIuV8CTinr9r5w==", - "dev": true, - "requires": { - "@smithy/middleware-stack": "^2.0.6", - "@smithy/types": "^2.4.0", - "@smithy/util-stream": "^2.0.17", - "tslib": "^2.5.0" - } - }, - "@smithy/types": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.4.0.tgz", - "integrity": "sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/url-parser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.12.tgz", - "integrity": "sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA==", - "dev": true, - "requires": { - "@smithy/querystring-parser": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", - "dev": true, - "requires": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-body-length-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", - "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/util-body-length-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", - "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/util-buffer-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", - "dev": true, - "requires": { - "@smithy/is-array-buffer": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-config-provider": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", - "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/util-defaults-mode-browser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.16.tgz", - "integrity": "sha512-Uv5Cu8nVkuvLn0puX+R9zWbSNpLIR3AxUlPoLJ7hC5lvir8B2WVqVEkJLwtixKAncVLasnTVjPDCidtAUTGEQw==", - "dev": true, - "requires": { - "@smithy/property-provider": "^2.0.13", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-defaults-mode-node": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.21.tgz", - "integrity": "sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw==", - "dev": true, - "requires": { - "@smithy/config-resolver": "^2.0.16", - "@smithy/credential-provider-imds": "^2.0.18", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/property-provider": "^2.0.13", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-endpoints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.2.tgz", - "integrity": "sha512-QEdq+sP68IJHAMVB2ugKVVZEWeKQtZLuf+akHzc8eTVElsZ2ZdVLWC6Cp+uKjJ/t4yOj1qu6ZzyxJQEQ8jdEjg==", - "dev": true, - "requires": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-hex-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", - "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/util-middleware": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.5.tgz", - "integrity": "sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw==", - "dev": true, - "requires": { - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-retry": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.5.tgz", - "integrity": "sha512-x3t1+MQAJ6QONk3GTbJNcugCFDVJ+Bkro5YqQQK1EyVesajNDqxFtCx9WdOFNGm/Cbm7tUdwVEmfKQOJoU2Vtw==", - "dev": true, - "requires": { - "@smithy/service-error-classification": "^2.0.5", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-stream": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.17.tgz", - "integrity": "sha512-fP/ZQ27rRvHsqItds8yB7jerwMpZFTL3QqbQbidUiG0+mttMoKdP0ZqnvM8UK5q0/dfc3/pN7g4XKPXOU7oRWw==", - "dev": true, - "requires": { - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/types": "^2.4.0", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-uri-escape": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", - "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", - "dev": true, - "requires": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-waiter": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.12.tgz", - "integrity": "sha512-3sENmyVa1NnOPoiT2NCApPmu7ukP7S/v7kL9IxNmnygkDldn7/yK0TP42oPJLwB2k3mospNsSePIlqdXEUyPHA==", - "dev": true, - "requires": { - "@smithy/abort-controller": "^2.0.12", - "@smithy/types": "^2.4.0", - "tslib": "^2.5.0" - } - }, - "@types/babel__core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", - "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.5", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", - "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", - "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", - "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", - "dev": true, - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "29.5.5", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", - "integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", - "dev": true, - "requires": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/tough-cookie": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", - "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", - "dev": true - }, - "@types/uuid": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz", - "integrity": "sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dev": true, - "requires": { - "debug": "^4.3.4" - } - }, - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-parser": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-3.2.10.tgz", - "integrity": "sha512-CGKGIbd678lm15IXJXI1cTyOVAnMQw0jES+klW/yIc+GzYccsYanLMhczPIIj2hE64B79g75QfiuWrEWd6nJdg==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", - "dev": true, - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "axios-cookiejar-support": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.7.tgz", - "integrity": "sha512-9vpE3y/a2l2Vs2XEJE4L2z0GWnlpJ4Xj+kDaoCtrpPfS1J3oikXBrxRJX6H62/ZcelOGe+519yW7mqXCIoPXuw==", - "dev": true, - "requires": { - "http-cookie-agent": "^5.0.4" - } - }, - "babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "requires": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-module-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz", - "integrity": "sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==", - "dev": true, - "requires": { - "find-babel-config": "^2.0.0", - "glob": "^8.0.3", - "pkg-up": "^3.1.0", - "reselect": "^4.1.7", - "resolve": "^1.22.1" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bootstrap": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", - "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", - "dev": true, - "requires": {} - }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.21.11", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz", - "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001538", - "electron-to-chromium": "^1.4.526", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "dev": true, - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "bunyan-debug-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bunyan-debug-stream/-/bunyan-debug-stream-3.1.0.tgz", - "integrity": "sha512-VaFYbDVdiSn3ZpdozrjZ8mFpxHXl26t11C1DKRQtbo0EgffqeFNrRLOGIESKVeGEvVu4qMxMSSxzNlSw7oTj7w==", - "dev": true, - "requires": { - "chalk": "^4.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/byte-length/-/byte-length-1.0.2.tgz", - "integrity": "sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q==", - "dev": true - }, - "caf": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/caf/-/caf-15.0.1.tgz", - "integrity": "sha512-Xp/IK6vMwujxWZXra7djdYzPdPnEQKa7Mudu2wZgDQ3TJry1I0TgtjEgwZHpoBcMp68j4fb0/FZ1SJyMEgJrXQ==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001538", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", - "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chart.js": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.2.1.tgz", - "integrity": "sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==", - "dev": true, - "requires": { - "@kurkle/color": "^0.3.0" - } - }, - "child-process-promise": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz", - "integrity": "sha512-Fi4aNdqBsr0mv+jgWxcZ/7rAIC2mgihrptyVI4foh/rrjY/3BNjfP9+oaiFx/fzim+1ZyCNBae0DlyfQhSugog==", - "dev": true, - "requires": { - "cross-spawn": "^4.0.2", - "node-version": "^1.0.0", - "promise-polyfill": "^6.0.1" - } - }, - "ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "client-oauth2": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/client-oauth2/-/client-oauth2-4.3.3.tgz", - "integrity": "sha512-k8AvUYJon0vv75ufoVo4nALYb/qwFFicO3I0+39C6xEdflqVtr+f9cy+0ZxAduoVSTfhP5DX2tY2XICAd5hy6Q==", - "dev": true, - "requires": { - "popsicle": "^12.0.5", - "safe-buffer": "^5.2.0" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "core-js-compat": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", - "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", - "dev": true, - "requires": { - "browserslist": "^4.21.10" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true - } - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "requires": {} - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "detox": { - "version": "20.11.4", - "resolved": "https://registry.npmjs.org/detox/-/detox-20.11.4.tgz", - "integrity": "sha512-P48KAtK8qIDOxJKUl4q/syPkuHz67kAeFlNodBZg5aO4hJiH+RsbEkQfJSYkTCeZV800EcmUQwZK2M5amLoYaw==", - "dev": true, - "requires": { - "ajv": "^8.6.3", - "bunyan": "^1.8.12", - "bunyan-debug-stream": "^3.1.0", - "caf": "^15.0.1", - "chalk": "^4.0.0", - "child-process-promise": "^2.2.0", - "execa": "^5.1.1", - "find-up": "^5.0.0", - "fs-extra": "^11.0.0", - "funpermaproxy": "^1.1.0", - "glob": "^8.0.3", - "ini": "^1.3.4", - "json-cycle": "^1.3.0", - "lodash": "^4.17.11", - "multi-sort-stream": "^1.0.3", - "multipipe": "^4.0.0", - "node-ipc": "9.2.1", - "proper-lockfile": "^3.0.2", - "resolve-from": "^5.0.0", - "sanitize-filename": "^1.6.1", - "semver": "^7.0.0", - "serialize-error": "^8.0.1", - "shell-quote": "^1.7.2", - "signal-exit": "^3.0.3", - "stream-json": "^1.7.4", - "strip-ansi": "^6.0.1", - "telnet-client": "1.2.8", - "tempfile": "^2.0.0", - "trace-event-lib": "^1.3.1", - "which": "^1.3.1", - "ws": "^7.0.0", - "yargs": "^17.0.0", - "yargs-parser": "^21.0.0", - "yargs-unparser": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true - }, - "diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true - }, - "diff2html": { - "version": "3.4.43", - "resolved": "https://registry.npmjs.org/diff2html/-/diff2html-3.4.43.tgz", - "integrity": "sha512-cBiJKvyhY3bv+q9VHA7YyNdPk1PA+P9lArpp0MJlcpn1x4eiXYtK3ILNpcHXfgPTCdjjCilGvX9qBelGWtyMCg==", - "dev": true, - "requires": { - "diff": "5.1.0", - "highlight.js": "11.8.0", - "hogan.js": "3.0.2" - } - }, - "dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.14.0" - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "easy-stack": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", - "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.527", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.527.tgz", - "integrity": "sha512-EafxEiEDzk2aLrdbtVczylHflHdHkNrpGNHIgDyA63sUQLQVS2ayj2hPw3RsVB42qkwURH+T2OxV7kGPUuYszA==", - "dev": true - }, - "emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "event-pubsub": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", - "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", - "dev": true, - "requires": { - "strnum": "^1.0.5" - } - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-babel-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.0.0.tgz", - "integrity": "sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==", - "dev": true, - "requires": { - "json5": "^2.1.1", - "path-exists": "^4.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "funpermaproxy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/funpermaproxy/-/funpermaproxy-1.1.0.tgz", - "integrity": "sha512-2Sp1hWuO8m5fqeFDusyhKqYPT+7rGLw34N3qonDcdRP8+n7M7Gl/yKp/q7oCxnnJ6pWCectOmLFJpsMU/++KrQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "highlight.js": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz", - "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==", - "dev": true, - "optional": true - }, - "hogan.js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", - "integrity": "sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==", - "dev": true, - "requires": { - "mkdirp": "0.3.0", - "nopt": "1.0.10" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==", - "dev": true - } - } - }, - "holderjs": { - "version": "2.9.9", - "resolved": "https://registry.npmjs.org/holderjs/-/holderjs-2.9.9.tgz", - "integrity": "sha512-ceWPz1MrR3dxOoZXiom+G48+l1VPG3TcjBw9fq5iwCiZAMvYX8Aia13GOxT7DoV/AcSyTH7Vvr11ygjZP9qn4w==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-cookie-agent": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz", - "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==", - "dev": true, - "requires": { - "agent-base": "^7.1.0" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "requires": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - } - }, - "jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "requires": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true - }, - "jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-html-reporters": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/jest-html-reporters/-/jest-html-reporters-3.1.4.tgz", - "integrity": "sha512-7lLrKDKDNBNDprd5lP241HRx2mRXb/XQOuYFxX/MxydgHtYRE/lEtK2+J5XLiNTs9JL/rUjWsWhIBOBs9j3wcg==", - "dev": true, - "requires": { - "fs-extra": "^10.0.0", - "open": "^8.0.3" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "jest-junit": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", - "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2", - "xml": "^1.0.1" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true - }, - "jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "requires": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - } - }, - "jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "jest-stare": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jest-stare/-/jest-stare-2.5.1.tgz", - "integrity": "sha512-++3JWdY2zJNPFCN6ao1oeW0Qg8oKVYT9XaMUr8RaNDHDGKOQMNjmMrVz9E/4E43ZDU2mPTtk9U8pS+KjSuxPKg==", - "dev": true, - "requires": { - "@jest/reporters": "^29.0.0", - "@jest/test-result": "^29.0.0", - "@jest/types": "^29.0.0", - "@types/jest": "^29.0.0", - "ansi-parser": "^3.2.10", - "bootstrap": "^5.0.0", - "chalk": "^4.1.0", - "chart.js": "^4.1.2", - "diff2html": "^3.4.40", - "holderjs": "^2.9.7", - "jquery": "^3.5.1", - "moment": "^2.27.0", - "mustache": "^4.0.0", - "pkg-up": "^3.0.0", - "popper.js": "^1.16.1", - "yargs": "^17.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "requires": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jquery": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.3.tgz", - "integrity": "sha512-bZ5Sy3YzKo9Fyc8wH2iIQK4JImJ6R0GWI9kL1/k7Z91ZBNgkRXE6U0JfHIizZbort8ZunhSI3jw9I6253ahKfg==", - "dev": true - }, - "js-message": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", - "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", - "dev": true - }, - "js-queue": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", - "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", - "dev": true, - "requires": { - "easy-stack": "^1.0.1" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-cycle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.3.0.tgz", - "integrity": "sha512-FD/SedD78LCdSvJaOUQAXseT8oQBb5z6IVYaQaCrVUlu9zOAr1BDdKyVYQaSD/GDsAMrXpKcOyBD4LIl8nfjHw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "junit-report-merger": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/junit-report-merger/-/junit-report-merger-6.0.2.tgz", - "integrity": "sha512-Jk9PXeaJhbgo3aUNza2r24JgxYzLUtCk2kwrub8fbmDuWUdXhT/nfbM2MlU3JQiFbjVud1bzBWdzr9/GGBWfmA==", - "dev": true, - "requires": { - "commander": "~10.0.0", - "fast-glob": "~3.2.11", - "xmlbuilder2": "3.1.1" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "make-error-cause": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-2.3.0.tgz", - "integrity": "sha512-etgt+n4LlOkGSJbBTV9VROHA5R7ekIPS4vfh+bCAoJgRrJWdqJCBbpS3osRJ/HrT7R68MzMiY3L3sDJ/Fd8aBg==", - "dev": true, - "requires": { - "make-error": "^1.3.5" - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "optional": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "dev": true - }, - "moment-timezone": { - "version": "0.5.43", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", - "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", - "dev": true, - "requires": { - "moment": "^2.29.4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multi-sort-stream": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multi-sort-stream/-/multi-sort-stream-1.0.4.tgz", - "integrity": "sha512-hAZ8JOEQFbgdLe8HWZbb7gdZg0/yAIHF00Qfo3kd0rXFv96nXe+/bPTrKHZ2QMHugGX4FiAyET1Lt+jiB+7Qlg==", - "dev": true - }, - "multipipe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-4.0.0.tgz", - "integrity": "sha512-jzcEAzFXoWwWwUbvHCNPwBlTz3WCWe/jPcXSmTfbo/VjRwRTfvLZ/bdvtiTdqCe8d4otCSsPCbhGYcX+eggpKQ==", - "dev": true, - "requires": { - "duplexer2": "^0.1.2", - "object-assign": "^4.1.0" - } - }, - "mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "dev": true, - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.6" - } - } - } - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "dev": true, - "optional": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-ipc": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz", - "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", - "dev": true, - "requires": { - "event-pubsub": "4.3.0", - "js-message": "1.0.7", - "js-queue": "2.0.2" - } - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node-version": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.2.0.tgz", - "integrity": "sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==", - "dev": true - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - } - } - }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", - "dev": true - }, - "popsicle": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-12.1.0.tgz", - "integrity": "sha512-muNC/cIrWhfR6HqqhHazkxjob3eyECBe8uZYSQ/N5vixNAgssacVleerXnE8Are5fspR0a+d2qWaBR1g7RYlmw==", - "dev": true, - "requires": { - "popsicle-content-encoding": "^1.0.0", - "popsicle-cookie-jar": "^1.0.0", - "popsicle-redirects": "^1.1.0", - "popsicle-transport-http": "^1.0.8", - "popsicle-transport-xhr": "^2.0.0", - "popsicle-user-agent": "^1.0.0", - "servie": "^4.3.3", - "throwback": "^4.1.0" - } - }, - "popsicle-content-encoding": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/popsicle-content-encoding/-/popsicle-content-encoding-1.0.0.tgz", - "integrity": "sha512-4Df+vTfM8wCCJVTzPujiI6eOl3SiWQkcZg0AMrOkD1enMXsF3glIkFUZGvour1Sj7jOWCsNSEhBxpbbhclHhzw==", - "dev": true, - "requires": {} - }, - "popsicle-cookie-jar": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/popsicle-cookie-jar/-/popsicle-cookie-jar-1.0.0.tgz", - "integrity": "sha512-vrlOGvNVELko0+J8NpGC5lHWDGrk8LQJq9nwAMIVEVBfN1Lib3BLxAaLRGDTuUnvl45j5N9dT2H85PULz6IjjQ==", - "dev": true, - "requires": { - "@types/tough-cookie": "^2.3.5", - "tough-cookie": "^3.0.1" - }, - "dependencies": { - "@types/tough-cookie": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.8.tgz", - "integrity": "sha512-7axfYN8SW9pWg78NgenHasSproWQee5rzyPVLC9HpaQSDgNArsnKJD88EaMfi4Pl48AyciO3agYCFqpHS1gLpg==", - "dev": true - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "popsicle-redirects": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/popsicle-redirects/-/popsicle-redirects-1.1.1.tgz", - "integrity": "sha512-mC2HrKjdTAWDalOjGxlXw9j6Qxrz/Yd2ui6bPxpi2IQDYWpF4gUAMxbA8EpSWJhLi0PuWKDwTHHPrUPGutAoIA==", - "dev": true, - "requires": {} - }, - "popsicle-transport-http": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/popsicle-transport-http/-/popsicle-transport-http-1.2.1.tgz", - "integrity": "sha512-i5r3IGHkGiBDm1oPFvOfEeSGWR0lQJcsdTqwvvDjXqcTHYJJi4iSi3ecXIttDiTBoBtRAFAE9nF91fspQr63FQ==", - "dev": true, - "requires": { - "make-error-cause": "^2.2.0" - } - }, - "popsicle-transport-xhr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/popsicle-transport-xhr/-/popsicle-transport-xhr-2.0.0.tgz", - "integrity": "sha512-5Sbud4Widngf1dodJE5cjEYXkzEUIl8CzyYRYR57t6vpy9a9KPGQX6KBKdPjmBZlR5A06pOBXuJnVr23l27rtA==", - "dev": true, - "requires": {} - }, - "popsicle-user-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/popsicle-user-agent/-/popsicle-user-agent-1.0.0.tgz", - "integrity": "sha512-epKaq3TTfTzXcxBxjpoKYMcTTcAX8Rykus6QZu77XNhJuRHSRxMd+JJrbX/3PFI0opFGSN0BabbAYCbGxbu0mA==", - "dev": true, - "requires": {} - }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise-polyfill": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", - "integrity": "sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "proper-lockfile": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-3.2.0.tgz", - "integrity": "sha512-iMghHHXv2bsxl6NchhEaFck8tvX3F9cknEEh1SUpguUOBjN7PAAW9BLzmbc1g/mCD1gY3EE2EABBHPJfFdHFmA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "requires": { - "minimatch": "^3.0.5" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "dev": true, - "optional": true, - "requires": { - "glob": "^6.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "dev": true, - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "dev": true, - "optional": true - }, - "sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dev": true, - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-error": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", - "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "servie": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/servie/-/servie-4.3.3.tgz", - "integrity": "sha512-b0IrY3b1gVMsWvJppCf19g1p3JSnS0hQi6xu4Hi40CIhf0Lx8pQHcvBL+xunShpmOiQzg1NOia812NAWdSaShw==", - "dev": true, - "requires": { - "@servie/events": "^1.0.0", - "byte-length": "^1.0.2", - "ts-expect": "^1.1.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dev": true, - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "stream-chain": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", - "dev": true - }, - "stream-json": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.7.5.tgz", - "integrity": "sha512-NSkoVduGakxZ8a+pTPUlcGEeAGQpWL9rKJhOFCV+J/QtdQUEU5vtBgVg6eJXn8JB8RZvpbJWZGvXkhz70MLWoA==", - "dev": true, - "requires": { - "stream-chain": "^2.2.5" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "telnet-client": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/telnet-client/-/telnet-client-1.2.8.tgz", - "integrity": "sha512-W+w4k3QAmULVNhBVT2Fei369kGZCh/TH25M7caJAXW+hLxwoQRuw0di3cX4l0S9fgH3Mvq7u+IFMoBDpEw/eIg==", - "dev": true, - "requires": { - "bluebird": "^3.5.4" - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true - }, - "tempfile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", - "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==", - "dev": true, - "requires": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "throwback": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throwback/-/throwback-4.1.0.tgz", - "integrity": "sha512-dLFe8bU8SeH0xeqeKL7BNo8XoPC/o91nz9/ooeplZPiso+DZukhoyZcSz9TFnUNScm+cA9qjU1m1853M6sPOng==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - } - } - }, - "trace-event-lib": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/trace-event-lib/-/trace-event-lib-1.3.1.tgz", - "integrity": "sha512-RO/TD5E9RNqU6MhOfi/njFWKYhrzOJCpRXlEQHgXwM+6boLSrQnOZ9xbHwOXzC+Luyixc7LNNSiTsqTVeF7I1g==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0", - "lodash": "^4.17.21" - } - }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dev": true, - "requires": { - "utf8-byte-length": "^1.0.1" - } - }, - "ts-expect": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-expect/-/ts-expect-1.3.0.tgz", - "integrity": "sha512-e4g0EJtAjk64xgnFPD6kTBUtpnMVzDrMb12N1YZV0VvSlhnVT3SGxiYTLdGy8Q5cYHOIC/FAHmZ10eGrAguicQ==", - "dev": true - }, - "ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true - }, - "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "requires": {} - }, - "xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true - }, - "xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "xmlbuilder2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", - "integrity": "sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==", - "dev": true, - "requires": { - "@oozcitak/dom": "1.15.10", - "@oozcitak/infra": "1.0.8", - "@oozcitak/util": "8.3.8", - "js-yaml": "3.14.1" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } } } diff --git a/detox/package.json b/detox/package.json index e92c0286088..cc81cdfba02 100644 --- a/detox/package.json +++ b/detox/package.json @@ -4,40 +4,41 @@ "repository": "git@github.com:mattermost/mattermost-mobile.git", "author": "Mattermost, Inc.", "devDependencies": { - "@aws-sdk/client-s3": "3.445.0", - "@aws-sdk/lib-storage": "3.445.0", + "@aws-sdk/client-s3": "3.650.0", + "@aws-sdk/lib-storage": "3.650.0", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-transform-modules-commonjs": "7.22.15", - "@babel/plugin-transform-runtime": "7.22.15", - "@babel/preset-env": "7.22.20", + "@babel/plugin-transform-modules-commonjs": "7.24.8", + "@babel/plugin-transform-runtime": "7.25.4", + "@babel/preset-env": "7.25.4", "@jest/test-sequencer": "29.7.0", - "@types/jest": "29.5.5", - "@types/tough-cookie": "4.0.3", - "@types/uuid": "9.0.4", - "axios": "1.5.0", - "axios-cookiejar-support": "4.0.7", + "@types/jest": "29.5.12", + "@types/tough-cookie": "4.0.5", + "@types/uuid": "10.0.0", + "async": "3.2.6", + "axios": "1.7.7", + "axios-cookiejar-support": "5.0.2", "babel-jest": "29.7.0", - "babel-plugin-module-resolver": "5.0.0", + "babel-plugin-module-resolver": "5.0.2", "client-oauth2": "4.3.3", "deepmerge": "4.3.1", - "detox": "20.11.4", + "detox": "20.26.2", "form-data": "4.0.0", "jest": "29.7.0", "jest-circus": "29.7.0", "jest-cli": "29.7.0", - "jest-html-reporters": "3.1.4", + "jest-html-reporters": "3.1.7", "jest-junit": "16.0.0", - "jest-stare": "2.5.1", - "junit-report-merger": "6.0.2", - "moment-timezone": "0.5.43", + "jest-stare": "2.5.2", + "junit-report-merger": "7.0.0", + "moment-timezone": "0.5.45", "recursive-readdir": "2.2.3", "sanitize-filename": "1.6.3", "shelljs": "0.8.5", - "tough-cookie": "4.1.3", - "ts-jest": "29.1.1", - "tslib": "2.6.2", - "typescript": "5.2.2", - "uuid": "9.0.1", + "tough-cookie": "5.0.0", + "ts-jest": "29.2.5", + "tslib": "2.7.0", + "typescript": "5.6.2", + "uuid": "10.0.0", "xml2js": "0.6.2" }, "scripts": { @@ -46,11 +47,15 @@ "e2e:android-test": "detox test -c android.emu.debug", "e2e:android-build-release": "detox build -c android.emu.release", "e2e:android-test-release": "detox test -c android.emu.release --record-logs failing --take-screenshots failing", + "e2e:ios-build": "IOS=true detox build -c ios.sim.debug", "e2e:ios-test": "IOS=true detox test -c ios.sim.debug", "e2e:ios-build-release": "detox build -c ios.sim.release", "e2e:ios-test-release": "IOS=true detox test -c ios.sim.release --record-logs failing --take-screenshots failing", + "detox:config-gen": "cd utils && node generate_detox_config_ci.js", "check": "npm run lint && npm run tsc", + "clean-detox": "detox clean", "lint": "eslint --ignore-pattern node_modules --quiet .", + "e2e:save-report": "node save_report.js", "start:webhook": "node webhook_server.js", "tsc": "NODE_OPTIONS=--max_old_space_size=12000 tsc --noEmit" } diff --git a/detox/save_report.js b/detox/save_report.js index a9803b08944..0b59d8829be 100644 --- a/detox/save_report.js +++ b/detox/save_report.js @@ -31,6 +31,7 @@ * - TYPE=[type], e.g. "MASTER", "PR", "RELEASE", "GEKIDOU" */ +const fs = require('fs'); const os = require('os'); const path = require('path'); @@ -74,17 +75,19 @@ const saveReport = async () => { removeOldGeneratedReports(); const detox_version = shell.exec('npm list detox').stdout.split('\n')[1].split('@')[1].trim(); - const headless = IOS === 'true' ? false : HEADLESS === 'true'; + const headless = IOS === 'true' ? 'false' : HEADLESS === 'true'; const os_name = os.platform(); const os_version = os.release(); const node_version = process.version; const npm_version = shell.exec('npm --version').stdout.trim(); + const device_name = DEVICE_NAME; + const device_os_version = DEVICE_OS_VERSION; // Write environment details to file const environmentDetails = { detox_version, - device_name: DEVICE_NAME, - device_os_version: DEVICE_OS_VERSION, + device_name, + device_os_version, headless, os_name, os_version, @@ -96,7 +99,7 @@ const saveReport = async () => { // Merge all XML reports into one single XML report const platform = process.env.IOS === 'true' ? 'ios' : 'android'; const combinedFilePath = `${ARTIFACTS_DIR}/${platform}-combined.xml`; - await mergeFiles(path.join(__dirname, combinedFilePath), [`${ARTIFACTS_DIR}/${platform}-junit*.xml`]); + await mergeFiles(path.join(__dirname, combinedFilePath), [`${ARTIFACTS_DIR}/${platform}-results*/${platform}-junit*.xml`]); console.log(`Merged, check ${combinedFilePath}`); // Read XML from a file @@ -112,9 +115,23 @@ const saveReport = async () => { // Generate jest-stare report const jestStareOutputDir = path.join(__dirname, `${ARTIFACTS_DIR}/jest-stare`); const jestStareCombinedFilePath = `${jestStareOutputDir}/${platform}-combined.json`; - await mergeJestStareJsonFiles(jestStareCombinedFilePath, [`${ARTIFACTS_DIR}/jest-stare/${platform}-data*.json`]); + if (!fs.existsSync(jestStareOutputDir)) { + fs.mkdirSync(jestStareOutputDir, {recursive: true}); + } + + // "ios-results-*" or "android-results-*" is the path in CI where the parallel detox jobs save the artifacts + await mergeJestStareJsonFiles(jestStareCombinedFilePath, [`${ARTIFACTS_DIR}/${platform}-results*/jest-stare/${platform}-data*.json`]); generateJestStareHtmlReport(jestStareOutputDir, `${platform}-report.html`, jestStareCombinedFilePath); + if (process.env.CI) { + // Delete folders starting with "ios-results-" or "android-results-" only in CI environment + const entries = fs.readdirSync(ARTIFACTS_DIR, {withFileTypes: true}); + for (const entry of entries) { + if (entry.isDirectory() && entry.name.startsWith(`${platform}-results-`)) { + fs.rmSync(path.join(ARTIFACTS_DIR, entry.name), {recursive: true}); + } + } + } const result = await saveArtifacts(); if (result && result.success) { console.log('Successfully uploaded artifacts to S3:', result.reportLink); @@ -125,6 +142,9 @@ const saveReport = async () => { if (ZEPHYR_ENABLE === 'true') { const {start, end} = summary.stats; testCycle = ZEPHYR_CYCLE_KEY ? {key: ZEPHYR_CYCLE_KEY} : await createTestCycle(start, end); + if (!testCycle?.key) { + console.log('Failed to create test cycle'); + } } // Send test report to "QA: Mobile Test Automation Report" channel via webhook diff --git a/detox/utils/artifacts.js b/detox/utils/artifacts.js index d2ffcf40fcc..0778defb037 100644 --- a/detox/utils/artifacts.js +++ b/detox/utils/artifacts.js @@ -17,13 +17,11 @@ const {ARTIFACTS_DIR} = require('./constants'); require('dotenv').config(); const { - BRANCH, - BUILD_ID, - COMMIT_HASH, DETOX_AWS_S3_BUCKET, DETOX_AWS_ACCESS_KEY_ID, DETOX_AWS_SECRET_ACCESS_KEY, IOS, + REPORT_PATH, } = process.env; const platform = IOS === 'true' ? 'ios' : 'android'; @@ -45,7 +43,6 @@ async function saveArtifacts() { return; } - const s3Folder = `${BUILD_ID}-${COMMIT_HASH}-${BRANCH}`.replace(/\./g, '-'); const uploadPath = path.resolve(__dirname, `../${ARTIFACTS_DIR}`); const filesToUpload = await getFiles(uploadPath); @@ -54,7 +51,7 @@ async function saveArtifacts() { filesToUpload, 10, async.asyncify(async (file) => { - const Key = file.replace(uploadPath, s3Folder); + const Key = file.replace(uploadPath, REPORT_PATH); const contentType = mime.lookup(file); const charset = mime.charset(contentType); @@ -80,7 +77,7 @@ async function saveArtifacts() { return reject(new Error(err)); } - const reportLink = `https://${DETOX_AWS_S3_BUCKET}.s3.amazonaws.com/${s3Folder}/jest-stare/${platform}-report.html`; + const reportLink = `https://${DETOX_AWS_S3_BUCKET}.s3.amazonaws.com/${REPORT_PATH}/jest-stare/${platform}-report.html`; resolve({success: true, reportLink}); }, ); diff --git a/detox/utils/generate_detox_config_ci.js b/detox/utils/generate_detox_config_ci.js new file mode 100644 index 00000000000..abf73423011 --- /dev/null +++ b/detox/utils/generate_detox_config_ci.js @@ -0,0 +1,14 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +/* eslint-disable no-process-env */ +/* eslint-disable no-console */ +const fs = require('fs'); +const deviceType = process.env.DETOX_DEVICE_TYPE || 'iPhone 15 Pro'; +const deviceOS = process.env.DETOX_DEVICE_OS || 'iOS 17.4'; +const detoxConfigTemplate = fs.readFileSync('../.detoxrc.json', 'utf8'); +const detoxConfig = detoxConfigTemplate.replace('__DEVICE_TYPE__', deviceType).replace('__DEVICE_OS__', deviceOS); + +fs.writeFileSync('../.detoxrc.json', detoxConfig); + +console.log('Detox configuration generated successfully'); diff --git a/detox/utils/report.js b/detox/utils/report.js index 7fca48ee5e5..c0bc53fb944 100644 --- a/detox/utils/report.js +++ b/detox/utils/report.js @@ -113,8 +113,8 @@ function generateStats(allTests) { const duration = allTests.duration; const start = allTests.start; const end = allTests.end; - const passes = tests - (failures + errors); - const passPercent = tests > 0 ? (passes / tests) * 100 : 0; + const passes = tests - (failures + errors + skipped); + const passPercent = tests > 0 ? ((passes / tests) * 100).toFixed(2) : 0; return { suites, @@ -134,7 +134,7 @@ function generateStatsFieldValue(stats, failedFullTitles) { let statsFieldValue = ` | Key | Value | |:---|:---| -| Passing Rate | ${stats.passPercent.toFixed(2)}% | +| Passing Rate | ${stats.passPercent}% | | Duration | ${(stats.duration / (60 * 1000)).toFixed(4)} mins | | Suites | ${stats.suites} | | Tests | ${stats.tests} | @@ -281,7 +281,7 @@ function generateTestReport(summary, isUploadedToS3, reportLink, environment, te }; } - let quickSummary = `${stats.passPercent.toFixed(2)}% (${stats.passes}/${stats.tests}) in ${stats.suites} suites`; + let quickSummary = `${stats.passPercent}% (${stats.passes}/${stats.tests}) in ${stats.suites} suites`; if (isUploadedToS3) { quickSummary = `[${quickSummary}](${reportLink})`; } @@ -308,15 +308,15 @@ function generateTestReport(summary, isUploadedToS3, reportLink, environment, te function generateTitle() { const { BRANCH, - BUILD_AWS_S3_BUCKET, - BUILD_ID, COMMIT_HASH, + DETOX_AWS_S3_BUCKET, IOS, PULL_REQUEST, RELEASE_BUILD_NUMBER, RELEASE_DATE, RELEASE_VERSION, TYPE, + REPORT_PATH, } = process.env; const platform = IOS === 'true' ? 'iOS' : 'Android'; @@ -324,7 +324,7 @@ function generateTitle() { const appExtension = IOS === 'true' ? 'ipa' : 'apk'; const appFileName = `Mattermost_Beta.${appExtension}`; const appBuildType = 'mattermost-mobile-beta'; - const s3Folder = `${platform.toLocaleLowerCase()}/${BUILD_ID}-${COMMIT_HASH}-${BRANCH}`.replace(/\./g, '-'); + const s3Folder = `${platform.toLocaleLowerCase()}/${REPORT_PATH}`; const appFilePath = IOS === 'true' ? 'Mattermost-simulator-x86_64.app.zip' : 'android/app/build/outputs/apk/release/app-release.apk'; let buildLink = ''; let releaseDate = ''; @@ -332,7 +332,7 @@ function generateTitle() { switch (TYPE) { case 'PR': - buildLink = ` with [${lane}:${COMMIT_HASH}](https://${BUILD_AWS_S3_BUCKET}.s3.amazonaws.com/${s3Folder}/${appFilePath})`; + buildLink = ` with [${lane}:${COMMIT_HASH}](https://${DETOX_AWS_S3_BUCKET}.s3.amazonaws.com/${s3Folder}/${appFilePath})`; title = `${platform} E2E for Pull Request Build: [${BRANCH}](${PULL_REQUEST})${buildLink}`; break; case 'RELEASE': diff --git a/docs/architecture-diagram.monopic b/docs/architecture-diagram.monopic new file mode 100644 index 00000000000..55f14d1d04a Binary files /dev/null and b/docs/architecture-diagram.monopic differ diff --git a/docs/architecture-diagram.png b/docs/architecture-diagram.png new file mode 100644 index 00000000000..30ffb837a9f Binary files /dev/null and b/docs/architecture-diagram.png differ diff --git a/docs/database/server/server-v2.pdf b/docs/database/server/server-v2.pdf deleted file mode 100644 index 3a7bb5bdbcf..00000000000 Binary files a/docs/database/server/server-v2.pdf and /dev/null differ diff --git a/docs/database/server/server-v2.png b/docs/database/server/server-v2.png deleted file mode 100644 index 28add1280ab..00000000000 Binary files a/docs/database/server/server-v2.png and /dev/null differ diff --git a/docs/database/server/server-v2.rtf b/docs/database/server/server-v2.rtf deleted file mode 100644 index e9578d8e738..00000000000 --- a/docs/database/server/server-v2.rtf +++ /dev/null @@ -1 +0,0 @@ -{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fcharset1 Symbol;}{\f1\fcharset1 Wingdings;}{\f2\fcharset1 Courier New;}{\f3\fcharset1 Arial Unicode MS;}}{\colortbl\red0\green0\blue0;\red50\green60\blue70;\red0\green255\blue0;\red255\green255\blue255;\red0\green90\blue160;\red128\green128\blue128;\red245\green246\blue246;}{\stylesheet{\*\cs0\additive DefaultParagraphFont;}{\s1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i0\cf1 Normal;}{\s2\sbasedon1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel0\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading1;}{\s3\sbasedon2\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading2;}{\s4\sbasedon3\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel2\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading3;}{\s5\sbasedon4\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel3\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading4;}{\s6\sbasedon5\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel4\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading5;}{\s7\sbasedon6\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel5\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading6;}{\s8\sbasedon7\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel6\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading7;}{\s9\sbasedon8\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel7\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading8;}{\s10\sbasedon9\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel8\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading9;}{\s11\sbasedon1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i0\cf1 List;}{\s12\sbasedon1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i0\cf1 Footnote;}{\s13\sbasedon1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i0\cf1 Header;}{\s14\sbasedon1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i0\cf1 Footer;}{\*\cs15\additive\sbasedon0 Hyperlink;}{\s16\sbasedon1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b\uldash\i0\cf2 InvalidStyleName;}{\s17\sbasedon1\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs24\b0\ulnone\i0\cf1 TableHeading;}{\s18\sbasedon1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading 1;}{\s19\sbasedon17\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs24\b0\ulnone\i0\cf1 Heading 2;}{\s20\sbasedon1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i0\cf1 Heading 3;}{\s21\sbasedon1\ql\sb0\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i\cf1 TableDescription;}{\s22\sbasedon1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1 TableRow;}{\s23\sbasedon22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3 HeadingTableRow;}}\ftnbj\viewkind4\uc1\lnbrkrule\fet0\facingp\htmautsp\sectd\sftnbj\pghsxn16838\pgwsxn11906\marglsxn1417\margrsxn1417\margtsxn1417\margbsxn1134\headery709\footery709\sbkpage{\headerr\pard\s13\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs36\b0\ulnone\i0\cf4\brdrbtw QuickDBD\par\pard\s13\ql\sb0\sa240\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf4\brdrbtw{\field{\*\fldinst HYPERLINK "www.quickdatabasediagrams.com"}{\fldrslt{\cs15{www.quickdatabasediagrams.com}}}}\par}{\headerl\pard\s13\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs36\b0\ulnone\i0\cf4\brdrbtw QuickDBD\par\pard\s13\ql\sb0\sa240\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf4\brdrbtw{\field{\*\fldinst HYPERLINK "www.quickdatabasediagrams.com"}{\fldrslt{\cs15{www.quickdatabasediagrams.com}}}}\par}{\footerr\pard\s14\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf5\brdrbtw QuickDBD-New File\par\pard\s14\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf5\brdrbtw Page {\field\flddirty{\*\fldinst PAGE}{\fldrslt < Please update this field. >}} of {\field\flddirty{\*\fldinst NUMPAGES}{\fldrslt < Please update this field. >}}\par}{\footerl\pard\s14\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf5\brdrbtw QuickDBD-New File\par\pard\s14\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf5\brdrbtw Page {\field\flddirty{\*\fldinst PAGE}{\fldrslt < Please update this field. >}} of {\field\flddirty{\*\fldinst NUMPAGES}{\fldrslt < Please update this field. >}}\par}\pard\s18\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel0\slmult1\f3\fs32\b0\ulnone\i0\cf1\brdrbtw New File Documentation\par\pard\s1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i0\cf1\brdrbtw Link to schema: {\field{\*\fldinst HYPERLINK "https://app.quickdatabasediagrams.com/#/d/6OtugI"}{\fldrslt{\cs15{https://app.quickdatabasediagrams.com/#/d/6OtugI}}}}\par\pard\s21\ql\sb0\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i\cf1\brdrbtw Server Database - Schema Version 2\line Please bump the version by 1, any time the schema changes.\line Also, include the migration plan under app/database/migration/server,\line update all models, relationships and types.\line Lastly, export all PNGs, SVGs, etc under the source project (./docs/database)\line If you have any question/queries that you would like to clarify, please reach out to the Mobile Platform Team.\par\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw Category\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw server-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw collapsed\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw bool\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw display_name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw muted\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw bool\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw sort_order\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw sorting\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw alpha, recent, manual\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw team_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw type\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw 'channels' | 'direct_messages' | 'favorites' | 'custom'\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw CategoryChannel\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw composition ID Team.id_Channel.id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw category_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw channel_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw sort_order\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw Channel\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw server-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK, FK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw create_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw creator_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw delete_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw display_name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw is_group_constrained\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw bool\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw shared\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw bool\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw team_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw type\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw update_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw ChannelInfo\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw same value as Channel.id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK, FK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw guest_count\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw header\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw member_count\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw pinned_post_count\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw files_count\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw purpose\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw ChannelMembership\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw composition ID Channel.id-User.id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw channel_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw user_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw scheme_admin\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw bool\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw CustomEmoji\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw auto-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw Draft\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw auto-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw channel_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw files\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw stringify (array)\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw message\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw root_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, NULLABLE, INDEX\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw File\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw server-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw extension\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw height\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw image_thumbnail\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw base64 data string or filepath for video thumbnails\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw local_path\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw NULLABLE\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw mime_type\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw post_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw size\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw width\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw Group\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw server-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw display_name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw description\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw remote_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw source\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw created_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw updated_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw deleted_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw GroupChannel\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw composition ID Group.id-Channel.id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw group_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw channel_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw created_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw updated_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw deleted_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw GroupMembership\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw composition ID Group.id-User.id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw group_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw user_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw created_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw updated_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw deleted_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw GroupTeam\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw composition ID Group.id-Team.id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw group_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw team_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw created_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw updated_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw deleted_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw MyChannel\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw same as Channel.id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK, FK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw is_unread\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw boolean\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw last_post_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw last_viewed_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw manually_unread\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw boolean\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw mentions_count\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw message_count\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw roles\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw viewed_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw MyChannelSettings\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw same as Channel.id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK, FK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw notify_props\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw MyTeam\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw same as Team.id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK, FK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw roles\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw Post\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw server generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw channel_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw create_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw delete_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw edit_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw is_pinned\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw boolean\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw message\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw metadata\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw NULLABLE\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw original_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw pending_post_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw previous_post_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw props\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw root_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw type\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw update_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw user_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw PostsInChannel\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw auto-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw channel_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw earliest\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw latest\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw PostsInThread\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw auto-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw earliest\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw latest\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw root_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw Preference\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw server-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw category\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw user_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw value\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw Reaction\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw server-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw create_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw emoji_name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw post_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw user_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw Role\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw server-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw permissions\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw stringify array\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw System\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw SYSTEM_IDENTIFIERS\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw value\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw Team\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw server-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw allowed_domains\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw description\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw display_name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw is_allow_open_invite\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw boolean\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw is_group_constrained\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw boolean\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw last_team_icon_updated_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw type\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw update_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw TeamChannelHistory\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw same as Team.id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK, FK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw channel_ids\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw stringified JSON array; FIFO\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw TeamMembership\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw auto-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw team_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw user_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw scheme_admin\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw bool\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw TeamSearchHistory\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw auto-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw created_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw display_term\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw team_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw term\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw Thread\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw similar to Post.id but for root post only\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK, FK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw is_following\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw boolean\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw last_reply_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw last_viewed_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw reply_count\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw unread_mentions\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw unread_replies\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw viewed_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw ThreadsInTeam\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw auto-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw loaded_in_global_threads\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw boolean\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw team_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw thread_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw ThreadParticipant\par\pard\s21\ql\sb0\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i\cf1\brdrbtw who is participating in this conversation\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw auto-generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw thread_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw user_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw FK, INDEX\cell\row\pard\s19\ql\sb240\sa120\widctlpar\fi0\li0\lin0\ri0\rin0\outlinelevel1\slmult1\f3\fs24\b0\ulnone\i0\cf1\brdrbtw User\par\trowd\trleft20\trrh0\trkeep\trhdr\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat4\cellx7957\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Field\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Description\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Type\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Default\cell\pard\intbl\s23\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b\ulnone\i0\cf3\brdrbtw Other\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw server generated\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw PK\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw auth_service\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw delete_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw email\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw first_name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw is_bot\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw boolean\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw is_guest\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw boolean\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw last_name\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw last_picture_update\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw locale\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw nickname\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw notify_props\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw position\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw props\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw remote_id\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw NULLABLE\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw roles\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw status\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw timezone\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw update_at\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw number\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\trowd\trleft20\trrh0\trkeep\trpaddt80\trpaddft3\trpaddb80\trpaddfb3\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx2288\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx4555\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx5689\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx6823\clbrdrt\clbrdrl\clbrdrr\clbrdrb\clpadt80\clpadft3\clpadr80\clpadfr3\clcbpat6\cellx7957\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw username\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw string\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\pard\intbl\s22\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs16\b0\ulnone\i0\cf1\brdrbtw\cell\row\pard\s1\ql\sb0\sa0\widctlpar\fi0\li0\lin0\ri0\rin0\slmult1\f3\fs20\b0\ulnone\i0\cf1\brdrbtw\par} \ No newline at end of file diff --git a/docs/database/server/server-v3.pdf b/docs/database/server/server-v3.pdf new file mode 100644 index 00000000000..df3ebdadfc0 Binary files /dev/null and b/docs/database/server/server-v3.pdf differ diff --git a/docs/database/server/server-v3.png b/docs/database/server/server-v3.png new file mode 100644 index 00000000000..7e41343ad4f Binary files /dev/null and b/docs/database/server/server-v3.png differ diff --git a/docs/database/server/server-v3.rtf b/docs/database/server/server-v3.rtf new file mode 100644 index 00000000000..c8ca440a616 --- /dev/null +++ b/docs/database/server/server-v3.rtf @@ -0,0 +1,674 @@ +{\rtf1\ulc1\ansi\ansicpg0\hyphauto\deftab720\viewscale100\ftnnar\ftnstart1\ftnrstcont\ftntj\aftnnrlc\aftnstart1\aftnrestart\aftntj\spltpgpar1\htmautsp{\fonttbl{\f1\fnil\fprq2{\*\panose 020B0604020202020204} {\uc1\u76*\u105*\u98*\u101*\u114*\u97*\u116*\u105*\u111*\u110*\u32*\u83*\u97*\u110*\u115*};}{\f2\fnil\fprq2{\*\panose 020B0604020202020204} {\uc1\u65*\u114*\u105*\u97*\u108*\u32*\u85*\u110*\u105*\u99*\u111*\u100*\u101*\u32*\u77*\u83*};}{\f3\fnil\fprq2{\*\panose 020B0604020202020204} {\uc1\u65*\u114*\u105*\u97*\u108*};}{\f4\fnil\fprq2{\*\panose 02020603050405020304} {\uc1\u76*\u105*\u98*\u101*\u114*\u97*\u116*\u105*\u111*\u110*\u32*\u83*\u101*\u114*\u105*\u102*};}{\f5\fnil\fprq2{\*\panose 020F0502020204030204} {\uc1\u67*\u97*\u108*\u105*\u98*\u114*\u105*};}{\f6\fnil\fprq2{\*\panose 02020603050405020304} {\uc1\u84*\u105*\u109*\u101*\u115*\u32*\u78*\u101*\u119*\u32*\u82*\u111*\u109*\u97*\u110*};}{\f7\fnil\fprq2{\*\panose 02040503050406030204} {\uc1\u67*\u97*\u109*\u98*\u114*\u105*\u97*};}}{\colortbl;\red189\green129\blue79;\red77\green80\blue192;\red89\green187\blue155;\red162\green100\blue128;\red198\green172\blue75;\red70\green150\blue247;\red0\green0\blue0;\red125\green73\blue31;\red255\green255\blue255;\red225\green236\blue238;\red255\green0\blue0;\red128\green0\blue128;\red0\green0\blue0;\red255\green255\blue255;\red242\green242\blue242;\red64\green64\blue64;\red203\green203\blue203;\red219\green229\blue242;\red243\green221\blue220;\red235\green241\blue221;\red229\green223\blue236;\red218\green238\blue243;\red253\green234\blue217;\red220\green230\blue242;\red93\green139\blue194;\red218\green151\blue150;\red155\green187\blue90;\red178\green161\blue199;\red75\green172\blue198;\red247\green150\blue70;\red191\green191\blue191;\red138\green138\blue138;\red174\green197\blue225;\red79\green129\blue189;\red226\green175\blue173;\red192\green80\blue77;\red209\green224\blue179;\red155\green187\blue89;\red197\green184\blue212;\red128\green100\blue162;\red172\green217\blue229;\red251\green207\blue170;\red74\green74\blue74;\red62\green109\blue165;\red159\green58\blue56;\red92\green115\blue47;\red102\green79\blue132;\red38\green104\blue121;\red178\green84\blue8;\red211\green223\blue238;\red239\green211\blue210;\red230\green238\blue213;\red223\green216\blue232;\red210\green234\blue241;\red253\green229\blue209;\red195\green214\blue156;\red146\green205\blue221;\red250\green192\blue145;\red127\green127\blue127;\red43\green75\blue114;\red124\green153\blue63;\red51\green139\blue163;\red221\green104\blue10;\red200\green215\blue234;\red15\green71\blue97;\red89\green89\blue89;\red39\green39\blue39;\red90\green90\blue90;\red149\green79\blue114;\red50\green60\blue70;\red0\green0\blue128;\red0\green90\blue160;\red0\green255\blue0;\red128\green128\blue128;\red245\green246\blue246;}{\*\defchp \f4\fs24}{\*\defpap \sl240\slmult1}{\stylesheet{\*\ts1\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trpaddl108\trpaddr108\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\scompose\ssemihidden\sunhideused {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};}{\*\ts1\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*\u32*\u84*\u97*\u98*\u108*\u101*};} + +{\*\ts2\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trpaddl108\trpaddr108\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};}{\*\ts2\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*};} + +{\*\ts3\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trpaddl108\trpaddr108\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts3\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u84*\u97*\u98*\u108*\u101*\u32*\u71*\u114*\u105*\u100*\u32*\u76*\u105*\u103*\u104*\u116*};} + +{\*\ts4\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trpaddl108\trpaddr108\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};}{\*\ts4\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*};} + +{\*\ts5\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trpaddl108\trpaddr108\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts5\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};} + +{\*\ts6\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\caps\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\caps\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\caps\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\caps\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts6\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};} + +{\*\ts7\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts7\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};} + +{\*\ts8\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\i\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\i\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\i\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\i\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};}{\*\ts8\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u80*\u108*\u97*\u105*\u110*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*};} + +{\*\ts9\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts9\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};} + +{\*\ts10\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts10\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts11\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts11\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts12\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts12\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts13\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts13\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts14\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts14\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts15\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts15\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts16\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts16\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};} + +{\*\ts17\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts17\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts18\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts18\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts19\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts19\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts20\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts20\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts21\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts21\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts22\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts22\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts23\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts23\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};} + +{\*\ts24\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts24\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts25\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts25\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts26\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts26\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts27\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts27\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts28\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts28\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts29\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\i\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts29\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts30\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts30\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};} + +{\*\ts31\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts31\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts32\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts32\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts33\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts33\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts34\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts34\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts35\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts35\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts36\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts36\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts37\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\trshdng0\trcfpat14\trcbpat31\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts37\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};} + +{\*\ts38\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\trshdng0\trcfpat14\trcbpat18\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts38\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts39\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\trshdng0\trcfpat14\trcbpat19\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts39\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts40\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\trshdng0\trcfpat14\trcbpat20\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts40\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts41\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\trshdng0\trcfpat14\trcbpat21\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts41\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts42\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\trshdng0\trcfpat14\trcbpat22\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts42\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts43\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\trshdng0\trcfpat14\trcbpat23\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts43\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts44\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf43 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf43 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf43 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf43 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts44\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};} + +{\*\ts45\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf44 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf44 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf44 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf44 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts45\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts46\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf45 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf45 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf45 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf45 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts46\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts47\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf46 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf46 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf46 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf46 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts47\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts48\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf47 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf47 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf47 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf47 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts48\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts49\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts49\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts50\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts50\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts51\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf43 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf43 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf43 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf43 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf43 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf43 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts51\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};} + +{\*\ts52\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf44 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf44 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf44 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf44 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf44 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf44 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts52\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts53\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf45 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf45 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf45 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf45 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf45 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf45 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts53\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts54\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf46 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf46 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf46 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf46 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf46 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf46 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts54\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts55\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf47 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf47 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf47 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf47 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf47 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf47 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts55\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts56\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf48 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts56\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts57\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf49 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf49 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf49 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf49 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf49 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf49 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts57\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u71*\u114*\u105*\u100*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts58\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};}{\*\ts58\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*};} + +{\*\ts59\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts59\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts60\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts60\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts61\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts61\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts62\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts62\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts63\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts63\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts64\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts64\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u49*\u32*\u76*\u105*\u103*\u104*\u116*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts65\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};}{\*\ts65\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*};} + +{\*\ts66\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts66\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts67\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts67\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts68\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts68\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts69\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts69\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts70\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts70\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts71\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts71\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u50*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts72\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};}{\*\ts72\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*};} + +{\*\ts73\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts73\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts74\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts74\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts75\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts75\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts76\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts76\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts77\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts77\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts78\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts78\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u51*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts79\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};}{\*\ts79\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*};} + +{\*\ts80\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts80\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts81\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts81\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts82\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts82\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts83\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts83\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts84\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts84\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts85\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts85\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u52*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts86\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw80\brdrcf13\trbrdrl\brdrs\brdrw80\brdrcf13\trbrdrb\brdrs\brdrw80\brdrcf13\trbrdrr\brdrs\brdrw80\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trshdng0\trcfpat14\trcbpat59\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};}{\*\ts86\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*};} + +{\*\ts87\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw80\brdrcf13\trbrdrl\brdrs\brdrw80\brdrcf13\trbrdrb\brdrs\brdrw80\brdrcf13\trbrdrr\brdrs\brdrw80\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trshdng0\trcfpat14\trcbpat34\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts87\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts88\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw80\brdrcf13\trbrdrl\brdrs\brdrw80\brdrcf13\trbrdrb\brdrs\brdrw80\brdrcf13\trbrdrr\brdrs\brdrw80\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trshdng0\trcfpat14\trcbpat26\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts88\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts89\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw80\brdrcf13\trbrdrl\brdrs\brdrw80\brdrcf13\trbrdrb\brdrs\brdrw80\brdrcf13\trbrdrr\brdrs\brdrw80\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trshdng0\trcfpat14\trcbpat56\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts89\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts90\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw80\brdrcf13\trbrdrl\brdrs\brdrw80\brdrcf13\trbrdrb\brdrs\brdrw80\brdrcf13\trbrdrr\brdrs\brdrw80\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trshdng0\trcfpat14\trcbpat28\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts90\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts91\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw80\brdrcf13\trbrdrl\brdrs\brdrw80\brdrcf13\trbrdrb\brdrs\brdrw80\brdrcf13\trbrdrr\brdrs\brdrw80\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trshdng0\trcfpat14\trcbpat57\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts91\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts92\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw80\brdrcf13\trbrdrl\brdrs\brdrw80\brdrcf13\trbrdrb\brdrs\brdrw80\brdrcf13\trbrdrr\brdrs\brdrw80\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trshdng0\trcfpat14\trcbpat58\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\f3\fs22\cf14 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts92\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u53*\u32*\u68*\u97*\u114*\u107*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts93\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf13 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf13 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf13 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf13 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts93\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};} + +{\*\ts94\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf60 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf60 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf60 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf60 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts94\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts95\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf45 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf45 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf45 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf45 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts95\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts96\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf61 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf61 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf61 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf61 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts96\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts97\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf47 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf47 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf47 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf47 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts97\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts98\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf62 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf62 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf62 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf62 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts98\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts99\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf63 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf63 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf63 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\b\cf63 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts99\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u54*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts100\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf43 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf43 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf43 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf43 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf43 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf43 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};}{\*\ts100\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*};} + +{\*\ts101\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf60 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf60 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf60 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf60 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf60 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf60 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts101\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts102\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf45 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf45 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf45 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf45 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf45 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf45 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts102\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts103\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf61 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf61 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf61 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf61 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf61 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf61 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts103\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts104\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf47 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf47 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf47 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf47 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf47 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf47 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts104\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts105\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf62 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf62 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf62 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf62 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf62 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf62 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts105\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts106\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf63 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf63 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\qr\sl240\slmult1\f3\fs22\i\cf63 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\i\cf63 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf63 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf63 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts106\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u115*\u116*\u32*\u84*\u97*\u98*\u108*\u101*\u32*\u55*\u32*\u67*\u111*\u108*\u111*\u114*\u102*\u117*\u108*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts107\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts107\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};} + +{\*\ts108\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts108\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts109\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts109\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts110\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts110\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts111\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts111\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts112\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts112\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts113\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts113\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts114\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};}{\*\ts114\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*};} + +{\*\ts115\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts115\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts116\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts116\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts117\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts117\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts118\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts118\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts119\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts119\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts120\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\cf16\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf15 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts120\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u38*\u32*\u76*\u105*\u110*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\ts121\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};}{\*\ts121\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*};} + +{\*\ts122\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};}{\*\ts122\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u49*};} + +{\*\ts123\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};}{\*\ts123\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u50*};} + +{\*\ts124\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};}{\*\ts124\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u51*};} + +{\*\ts125\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};}{\*\ts125\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u52*};} + +{\*\ts126\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};}{\*\ts126\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u53*};} + +{\*\ts127\tsrowd\trautofit1\tblind0\tblindtype3\trleft0\trbrdrt\brdrs\brdrw10\brdrcf13\trbrdrl\brdrs\brdrw10\brdrcf13\trbrdrb\brdrs\brdrw10\brdrcf13\trbrdrr\brdrs\brdrw10\brdrcf13\trbrdrh\brdrs\brdrw10\brdrcf13\trbrdrv\brdrs\brdrw10\brdrcf13\tscbandsh1\tscbandsv1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sa0\sl240\slmult1\sbasedon1\scompose {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1\f3\fs22\cf16 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};}{\*\ts127\tsrowd\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\trautofit1\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\sl240\slmult1 {\uc1\u66*\u111*\u114*\u100*\u101*\u114*\u101*\u100*\u32*\u45*\u32*\u65*\u99*\u99*\u101*\u110*\u116*\u32*\u54*};} + +{\*\cs128\f3\fs40\cf65\sbasedon169\slink178\scompose {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u49*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs129\f3\fs32\cf65\sbasedon169\slink179\scompose {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u50*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs130\f3\fs28\cf65\sbasedon169\slink180\scompose {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u51*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs131\f3\i\cf65\sbasedon169\slink181\scompose {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u52*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs132\f3\cf65\sbasedon169\slink182\scompose {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u53*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs133\f3\i\cf66\sbasedon169\slink183\scompose {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u54*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs134\f3\cf66\sbasedon169\slink184\scompose {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u55*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs135\f3\i\cf67\sbasedon169\slink185\scompose {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u56*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs136\f3\i\cf67\sbasedon169\slink186\scompose {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u57*\u32*\u67*\u104*\u97*\u114*};} + +{\s137\sa80\sl240\slmult1\contextualspace\expndtw-10\expnd-2\f3\fs56\sbasedon165\snext165\slink138\scompose\sqformat {\uc1\u84*\u105*\u116*\u108*\u101*};} + +{\*\cs138\expndtw-10\expnd-2\f3\fs56\sbasedon169\slink137\scompose {\uc1\u84*\u105*\u116*\u108*\u101*\u32*\u67*\u104*\u97*\u114*};} + +{\s139\sl240\slmult1\expndtw15\expnd3\fs28\cf66\sbasedon165\snext165\slink140\scompose\sqformat {\uc1\u83*\u117*\u98*\u116*\u105*\u116*\u108*\u101*};} + +{\*\cs140\expndtw15\expnd3\fs28\cf66\sbasedon169\slink139\scompose {\uc1\u83*\u117*\u98*\u116*\u105*\u116*\u108*\u101*\u32*\u67*\u104*\u97*\u114*};} + +{\s141\qc\sb160\sl240\slmult1\i\cf16\sbasedon165\snext165\slink142\scompose\sqformat {\uc1\u81*\u117*\u111*\u116*\u101*};} + +{\*\cs142\i\cf16\sbasedon169\slink141\scompose {\uc1\u81*\u117*\u111*\u116*\u101*\u32*\u67*\u104*\u97*\u114*};} + +{\s143\lin720\sl240\slmult1\contextualspace\sbasedon165\scompose\sqformat {\uc1\u76*\u105*\u115*\u116*\u32*\u80*\u97*\u114*\u97*\u103*\u114*\u97*\u112*\u104*};} + +{\*\cs144\i\cf65\sbasedon169\scompose\sqformat {\uc1\u73*\u110*\u116*\u101*\u110*\u115*\u101*\u32*\u69*\u109*\u112*\u104*\u97*\u115*\u105*\u115*};} + +{\s145\qc\lin864\rin864\sb360\sa360\sl240\slmult1\brdrt\brdrs\brdrw10\brsp200\brdrcf65\brdrb\brdrs\brdrw10\brsp200\brdrcf65\i\cf65\sbasedon165\snext165\slink146\scompose\sqformat {\uc1\u73*\u110*\u116*\u101*\u110*\u115*\u101*\u32*\u81*\u117*\u111*\u116*\u101*};} + +{\*\cs146\i\cf65\sbasedon169\slink145\scompose {\uc1\u73*\u110*\u116*\u101*\u110*\u115*\u101*\u32*\u81*\u117*\u111*\u116*\u101*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs147\b\expndtw5\expnd1\scaps\cf65\sbasedon169\scompose\sqformat {\uc1\u73*\u110*\u116*\u101*\u110*\u115*\u101*\u32*\u82*\u101*\u102*\u101*\u114*\u101*\u110*\u99*\u101*};} + +{\s148\sa0\sl240\slmult1\sbasedon165\scompose\sqformat {\uc1\u78*\u111*\u32*\u83*\u112*\u97*\u99*\u105*\u110*\u103*};} + +{\*\cs149\i\cf16\sbasedon169\scompose\sqformat {\uc1\u83*\u117*\u98*\u116*\u108*\u101*\u32*\u69*\u109*\u112*\u104*\u97*\u115*\u105*\u115*};} + +{\*\cs150\i\sbasedon169\scompose\sqformat {\uc1\u69*\u109*\u112*\u104*\u97*\u115*\u105*\u115*};} + +{\*\cs151\b\sbasedon169\scompose\sqformat {\uc1\u83*\u116*\u114*\u111*\u110*\u103*};} + +{\*\cs152\scaps\cf68\sbasedon169\scompose\sqformat {\uc1\u83*\u117*\u98*\u116*\u108*\u101*\u32*\u82*\u101*\u102*\u101*\u114*\u101*\u110*\u99*\u101*};} + +{\*\cs153\b\expndtw5\expnd1\i\sbasedon169\scompose\sqformat {\uc1\u66*\u111*\u111*\u107*\u32*\u84*\u105*\u116*\u108*\u101*};} + +{\*\cs154\sbasedon169\slink189\scompose {\uc1\u72*\u101*\u97*\u100*\u101*\u114*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs155\sbasedon169\slink190\scompose {\uc1\u70*\u111*\u111*\u116*\u101*\u114*\u32*\u67*\u104*\u97*\u114*};} + +{\s156\sa0\sl240\slmult1\fs20\sbasedon165\slink157\scompose\ssemihidden\sunhideused {\uc1\u102*\u111*\u111*\u116*\u110*\u111*\u116*\u101*\u32*\u116*\u101*\u120*\u116*};} + +{\*\cs157\fs20\sbasedon169\slink156\scompose\ssemihidden {\uc1\u70*\u111*\u111*\u116*\u110*\u111*\u116*\u101*\u32*\u84*\u101*\u120*\u116*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs158\super\sbasedon169\scompose\ssemihidden\sunhideused {\uc1\u102*\u111*\u111*\u116*\u110*\u111*\u116*\u101*\u32*\u114*\u101*\u102*\u101*\u114*\u101*\u110*\u99*\u101*};} + +{\s159\sa0\sl240\slmult1\fs20\sbasedon165\slink160\scompose\ssemihidden\sunhideused {\uc1\u101*\u110*\u100*\u110*\u111*\u116*\u101*\u32*\u116*\u101*\u120*\u116*};} + +{\*\cs160\fs20\sbasedon169\slink159\scompose\ssemihidden {\uc1\u69*\u110*\u100*\u110*\u111*\u116*\u101*\u32*\u84*\u101*\u120*\u116*\u32*\u67*\u104*\u97*\u114*};} + +{\*\cs161\super\sbasedon169\scompose\ssemihidden\sunhideused {\uc1\u101*\u110*\u100*\u110*\u111*\u116*\u101*\u32*\u114*\u101*\u102*\u101*\u114*\u101*\u110*\u99*\u101*};} + +{\*\cs162\cf69\ul\sbasedon169\scompose\ssemihidden\sunhideused {\uc1\u70*\u111*\u108*\u108*\u111*\u119*\u101*\u100*\u72*\u121*\u112*\u101*\u114*\u108*\u105*\u110*\u107*};} + +{\s163\sl240\slmult1\scompose\sunhideused {\uc1\u84*\u79*\u67*\u32*\u72*\u101*\u97*\u100*\u105*\u110*\u103*};} + +{\s164\sa0\saauto0\sl240\slmult1\sbasedon165\snext165\scompose\sunhideused {\uc1\u116*\u97*\u98*\u108*\u101*\u32*\u111*\u102*\u32*\u102*\u105*\u103*\u117*\u114*\u101*\u115*};} + +{\s165\ql\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs20\i0\cf70 {\uc1\u78*\u111*\u114*\u109*\u97*\u108*};} + +{\s166\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon165 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u49*};} + +{\s167\ql\sb240\sa120\sl240\slmult1\b0\f2\fs24\i0\cf70\sbasedon193 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u50*};} + +{\s168\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon165 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u51*};} + +{\*\cs169\f4\fs24 {\uc1\u68*\u101*\u102*\u97*\u117*\u108*\u116*\u32*\u80*\u97*\u114*\u97*\u103*\u114*\u97*\u112*\u104*\u32*\u70*\u111*\u110*\u116*};} + +{\*\cs170\f4\fs24 {\uc1\u76*\u105*\u115*\u116*\u76*\u97*\u98*\u101*\u108*\u32*\u49*};} + +{\*\cs171\f4\fs24\cf71\ul {\uc1\u72*\u121*\u112*\u101*\u114*\u108*\u105*\u110*\u107*};} + +{\*\cs172\f4\fs16\cf72 {\uc1\u76*\u105*\u115*\u116*\u76*\u97*\u98*\u101*\u108*\u32*\u50*};} + +{\s173\keepn\ql\sb240\sa120\sl240\slmult1\b0\f1\fs28\i0\cf70\sbasedon165 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*};} + +{\s174\ql\sb0\sa140\sl276\slmult1\b0\f2\fs20\i0\cf70\sbasedon165 {\uc1\u66*\u111*\u100*\u121*\u32*\u84*\u101*\u120*\u116*};} + +{\s175\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon165 {\uc1\u76*\u105*\u115*\u116*};} + +{\s176\ql\sb120\sa120\sl240\slmult1\b0\f2\fs24\i\cf70\sbasedon165 {\uc1\u67*\u97*\u112*\u116*\u105*\u111*\u110*};} + +{\s177\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon165 {\uc1\u73*\u110*\u100*\u101*\u120*};} + +{\s178\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon165 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u49*};} + +{\s179\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon178 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u50*};} + +{\s180\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon179 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u51*};} + +{\s181\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon180 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u52*};} + +{\s182\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon181 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u53*};} + +{\s183\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon182 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u54*};} + +{\s184\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon183 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u55*};} + +{\s185\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon184 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u56*};} + +{\s186\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon185 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u32*\u57*};} + +{\s187\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon165 {\uc1\u70*\u111*\u111*\u116*\u110*\u111*\u116*\u101*};} + +{\s188\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon165 {\uc1\u72*\u101*\u97*\u100*\u101*\u114*\u32*\u97*\u110*\u100*\u32*\u70*\u111*\u111*\u116*\u101*\u114*};} + +{\s189\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon165 {\uc1\u72*\u101*\u97*\u100*\u101*\u114*};} + +{\s190\ql\sb0\sa0\sl240\slmult1\b0\f2\fs20\i0\cf70\sbasedon165 {\uc1\u70*\u111*\u111*\u116*\u101*\u114*};} + +{\s191\ql\sb0\sa0\sl240\slmult1\ltrpar\f4\fs24\cf13 {\uc1\u73*\u110*\u116*\u101*\u114*\u110*\u101*\u116*\u32*\u76*\u105*\u110*\u107*};} + +{\s192\ql\sb0\sa0\sl240\slmult1\b\f2\fs20\i0\cf73\ul\sbasedon165 {\uc1\u73*\u110*\u118*\u97*\u108*\u105*\u100*\u83*\u116*\u121*\u108*\u101*\u78*\u97*\u109*\u101*};} + +{\s193\ql\sb240\sa120\sl240\slmult1\b0\f2\fs24\i0\cf70\sbasedon165 {\uc1\u84*\u97*\u98*\u108*\u101*\u72*\u101*\u97*\u100*\u105*\u110*\u103*};} + +{\s194\ql\sb0\sa120\sl240\slmult1\b0\f2\fs20\i\cf70\sbasedon165 {\uc1\u84*\u97*\u98*\u108*\u101*\u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*};} + +{\s195\ql\sb0\sa0\sl240\slmult1\b0\f2\fs16\i0\cf70\sbasedon165 {\uc1\u84*\u97*\u98*\u108*\u101*\u82*\u111*\u119*};} + +{\s196\ql\sb0\sa0\sl240\slmult1\b\f2\fs16\i0\cf14\sbasedon195 {\uc1\u72*\u101*\u97*\u100*\u105*\u110*\u103*\u84*\u97*\u98*\u108*\u101*\u82*\u111*\u119*};} + +}{\info{\*\userprops {\propname Application}\proptype30{\staticval \u79*\u78*\u76*\u89*\u79*\u70*\u70*\u73*\u67*\u69*\u47*\u56*\u46*\u49*\u46*\u49*\u46*\u50*\u55*}}}\fet2{\*\ftnsep \pard\plain\s165\itap0\ql\sb0\sa0\sl240\slmult1\ltrpar{\f2\fs24\chftnsep}\f2\fs24}{\*\ftnsepc \pard\plain\s165\itap0\ql\sb0\sa0\sl240\slmult1\ltrpar{\f4\fs24\chftnsepc}\f4\fs24}{\*\aftnsep \pard\plain\s165\itap0\ql\sb0\sa0\sl240\slmult1\ltrpar{\f4\fs24\chftnsep}\f4\fs24}{\*\aftnsepc \pard\plain\s165\itap0\ql\sb0\sa0\sl240\slmult1\ltrpar{\f4\fs24\chftnsep}\f4\fs24} + +\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1134\gutter0\sectd\sbknone\cols1\colsx720\linebetcol0\sftnrstpg\saftnrestart\headery709\footery709{\headerr\pard\plain\s189\itap0\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs36\i0\cf72 \u81*\u117*\u105*\u99*\u107*\u68*\u66*\u68*}\b0\f2\fs20\i0\cf70\par\pard\plain\s189\itap0\ql\fi0\lin0\rin0\sb0\sa240\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\field {\*\fldinst \pard\plain{ \u72*\u89*\u80*\u69*\u82*\u76*\u73*\u78*\u75*\u32*\u34*\u102*\u105*\u108*\u101*\u58*\u47*\u47*\u47*\u104*\u111*\u109*\u101*\u47*\u116*\u104*\u101*\u111*\u102*\u111*\u114*\u103*\u101*\u114*\u47*\u87*\u111*\u114*\u107*\u98*\u101*\u110*\u99*\u104*\u47*\u87*\u101*\u98*\u115*\u116*\u111*\u114*\u109*\u80*\u114*\u111*\u106*\u101*\u99*\u116*\u115*\u47*\u109*\u97*\u116*\u116*\u101*\u114*\u109*\u111*\u115*\u116*\u45*\u109*\u111*\u98*\u105*\u108*\u101*\u47*\u100*\u111*\u99*\u115*\u47*\u100*\u97*\u116*\u97*\u98*\u97*\u115*\u101*\u47*\u115*\u101*\u114*\u118*\u101*\u114*\u47*\u119*\u119*\u119*\u46*\u113*\u117*\u105*\u99*\u107*\u100*\u97*\u116*\u97*\u98*\u97*\u115*\u101*\u100*\u105*\u97*\u103*\u114*\u97*\u109*\u115*\u46*\u99*\u111*\u109*\u34*}}{\fldrslt \pard\plain\s189\itap0\ql\fi0\lin0\rin0\sb0\sa240\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs16\i0\cf72 \u119*\u119*\u119*\u46*\u113*\u117*\u105*\u99*\u107*\u100*\u97*\u116*\u97*\u98*\u97*\u115*\u101*\u100*\u105*\u97*\u103*\u114*\u97*\u109*\u115*\u46*\u99*\u111*\u109*}\b0\f2\fs20\i0\cf70}}\b0\f2\fs20\i0\cf70\par}{\footerr\pard\plain\s190\itap0\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs16\i0\cf74 \u81*\u117*\u105*\u99*\u107*\u68*\u66*\u68*\u45*\u78*\u65*\u77*\u69*\u32*\u78*\u79*\u84*\u32*\u83*\u69*\u84*}\b0\f2\fs20\i0\cf70\par\pard\plain\s190\itap0\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs16\i0\cf74 \u80*\u97*\u103*\u101*\u32*}{\field {\*\fldinst\b0\f2\fs16\i0\cf74{\b0\f2\fs16\i0\cf74 \u32*\u80*\u65*\u71*\u69*\u32*}}{\fldrslt{\b0\f2\fs16\i0\cf74 \u51*}}}{\b0\f2\fs16\i0\cf74 \u32*\u111*\u102*\u32*}{\field {\*\fldinst\b0\f2\fs16\i0\cf74{\b0\f2\fs16\i0\cf74 \u32*\u78*\u85*\u77*\u80*\u65*\u71*\u69*\u83*\u32*}}{\fldrslt{\b0\f2\fs16\i0\cf74 \u56*}}}\b0\f2\fs20\i0\cf70\par}\pard\plain\s166\itap0\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs32\i0\cf70 \u78*\u65*\u77*\u69*\u32*\u78*\u79*\u84*\u32*\u83*\u69*\u84*\u32*\u68*\u111*\u99*\u117*\u109*\u101*\u110*\u116*\u97*\u116*\u105*\u111*\u110*}\b0\f2\fs20\i0\cf70\par\pard\plain\s165\itap0\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs20\i0\cf70 \u76*\u105*\u110*\u107*\u32*\u116*\u111*\u32*\u100*\u105*\u97*\u103*\u114*\u97*\u109*\u58*\u32*}{\field {\*\fldinst \pard\plain{ \u72*\u89*\u80*\u69*\u82*\u76*\u73*\u78*\u75*\u32*\u34*\u104*\u116*\u116*\u112*\u115*\u58*\u47*\u47*\u97*\u112*\u112*\u46*\u113*\u117*\u105*\u99*\u107*\u100*\u97*\u116*\u97*\u98*\u97*\u115*\u101*\u100*\u105*\u97*\u103*\u114*\u97*\u109*\u115*\u46*\u99*\u111*\u109*\u47*\u35*\u47*\u100*\u47*\u80*\u73*\u84*\u99*\u56*\u82*\u34*}}{\fldrslt \pard\plain\s165\itap0\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs20\i0\cf70 \u104*\u116*\u116*\u112*\u115*\u58*\u47*\u47*\u97*\u112*\u112*\u46*\u113*\u117*\u105*\u99*\u107*\u100*\u97*\u116*\u97*\u98*\u97*\u115*\u101*\u100*\u105*\u97*\u103*\u114*\u97*\u109*\u115*\u46*\u99*\u111*\u109*\u47*\u35*\u47*\u100*\u47*\u80*\u73*\u84*\u99*\u56*\u82*}\b0\f2\fs20\i0\cf70}}\b0\f2\fs20\i0\cf70\par\pard\plain\s194\itap0\ql\fi0\lin0\rin0\sb0\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs20\i\cf70 \u83*\u101*\u114*\u118*\u101*\u114*\u32*\u68*\u97*\u116*\u97*\u98*\u97*\u115*\u101*\u32*\u45*\u32*\u83*\u99*\u104*\u101*\u109*\u97*\u32*\u86*\u101*\u114*\u115*\u105*\u111*\u110*\u32*\u51*}{\b0\f2\fs20\i\cf70\line}{\b0\f2\fs20\i\cf70 \u80*\u108*\u101*\u97*\u115*\u101*\u32*\u98*\u117*\u109*\u112*\u32*\u116*\u104*\u101*\u32*\u118*\u101*\u114*\u115*\u105*\u111*\u110*\u32*\u98*\u121*\u32*\u49*\u44*\u32*\u97*\u110*\u121*\u32*\u116*\u105*\u109*\u101*\u32*\u116*\u104*\u101*\u32*\u115*\u99*\u104*\u101*\u109*\u97*\u32*\u99*\u104*\u97*\u110*\u103*\u101*\u115*\u46*}{\b0\f2\fs20\i\cf70\line}{\b0\f2\fs20\i\cf70 \u65*\u108*\u115*\u111*\u44*\u32*\u105*\u110*\u99*\u108*\u117*\u100*\u101*\u32*\u116*\u104*\u101*\u32*\u109*\u105*\u103*\u114*\u97*\u116*\u105*\u111*\u110*\u32*\u112*\u108*\u97*\u110*\u32*\u117*\u110*\u100*\u101*\u114*\u32*\u97*\u112*\u112*\u47*\u100*\u97*\u116*\u97*\u98*\u97*\u115*\u101*\u47*\u109*\u105*\u103*\u114*\u97*\u116*\u105*\u111*\u110*\u47*\u115*\u101*\u114*\u118*\u101*\u114*\u44*}{\b0\f2\fs20\i\cf70\line}{\b0\f2\fs20\i\cf70 \u117*\u112*\u100*\u97*\u116*\u101*\u32*\u97*\u108*\u108*\u32*\u109*\u111*\u100*\u101*\u108*\u115*\u44*\u32*\u114*\u101*\u108*\u97*\u116*\u105*\u111*\u110*\u115*\u104*\u105*\u112*\u115*\u32*\u97*\u110*\u100*\u32*\u116*\u121*\u112*\u101*\u115*\u46*}{\b0\f2\fs20\i\cf70\line}{\b0\f2\fs20\i\cf70 \u76*\u97*\u115*\u116*\u108*\u121*\u44*\u32*\u101*\u120*\u112*\u111*\u114*\u116*\u32*\u97*\u108*\u108*\u32*\u80*\u78*\u71*\u115*\u44*\u32*\u83*\u86*\u71*\u115*\u44*\u32*\u101*\u116*\u99*\u32*\u117*\u110*\u100*\u101*\u114*\u32*\u116*\u104*\u101*\u32*\u115*\u111*\u117*\u114*\u99*\u101*\u32*\u112*\u114*\u111*\u106*\u101*\u99*\u116*\u32*\u40*\u46*\u47*\u100*\u111*\u99*\u115*\u47*\u100*\u97*\u116*\u97*\u98*\u97*\u115*\u101*\u41*}{\b0\f2\fs20\i\cf70\line}{\b0\f2\fs20\i\cf70 \u73*\u102*\u32*\u121*\u111*\u117*\u32*\u104*\u97*\u118*\u101*\u32*\u97*\u110*\u121*\u32*\u113*\u117*\u101*\u115*\u116*\u105*\u111*\u110*\u47*\u113*\u117*\u101*\u114*\u105*\u101*\u115*\u32*\u116*\u104*\u97*\u116*\u32*\u121*\u111*\u117*\u32*\u119*\u111*\u117*\u108*\u100*\u32*\u108*\u105*\u107*\u101*\u32*\u116*\u111*\u32*\u99*\u108*\u97*\u114*\u105*\u102*\u121*\u44*\u32*\u112*\u108*\u101*\u97*\u115*\u101*\u32*\u114*\u101*\u97*\u99*\u104*\u32*\u111*\u117*\u116*\u32*\u116*\u111*\u32*\u116*\u104*\u101*\u32*\u77*\u111*\u98*\u105*\u108*\u101*\u32*\u80*\u108*\u97*\u116*\u102*\u111*\u114*\u109*\u32*\u84*\u101*\u97*\u109*\u46*}\b0\f2\fs20\i\cf70\par\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u67*\u97*\u116*\u101*\u103*\u111*\u114*\u121*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u101*\u114*\u118*\u101*\u114*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u111*\u108*\u108*\u97*\u112*\u115*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u105*\u115*\u112*\u108*\u97*\u121*\u95*\u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u109*\u117*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u111*\u114*\u116*\u95*\u111*\u114*\u100*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u111*\u114*\u116*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u108*\u112*\u104*\u97*\u44*\u32*\u114*\u101*\u99*\u101*\u110*\u116*\u44*\u32*\u109*\u97*\u110*\u117*\u97*\u108*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u101*\u97*\u109*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u121*\u112*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u39*\u99*\u104*\u97*\u110*\u110*\u101*\u108*\u115*\u39*\u32*\u124*\u32*\u39*\u100*\u105*\u114*\u101*\u99*\u116*\u95*\u109*\u101*\u115*\u115*\u97*\u103*\u101*\u115*\u39*\u32*\u124*\u32*\u39*\u102*\u97*\u118*\u111*\u114*\u105*\u116*\u101*\u115*\u39*\u32*\u124*\u32*\u39*\u99*\u117*\u115*\u116*\u111*\u109*\u39*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u67*\u97*\u116*\u101*\u103*\u111*\u114*\u121*\u67*\u104*\u97*\u110*\u110*\u101*\u108*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u111*\u109*\u112*\u111*\u115*\u105*\u116*\u105*\u111*\u110*\u32*\u73*\u68*\u32*\u84*\u101*\u97*\u109*\u46*\u105*\u100*\u95*\u67*\u104*\u97*\u110*\u110*\u101*\u108*\u46*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u97*\u116*\u101*\u103*\u111*\u114*\u121*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u104*\u97*\u110*\u110*\u101*\u108*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u111*\u114*\u116*\u95*\u111*\u114*\u100*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u67*\u104*\u97*\u110*\u110*\u101*\u108*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u101*\u114*\u118*\u101*\u114*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*\u44*\u32*\u70*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u114*\u101*\u97*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u114*\u101*\u97*\u116*\u111*\u114*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u101*\u108*\u101*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u105*\u115*\u112*\u108*\u97*\u121*\u95*\u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u115*\u95*\u103*\u114*\u111*\u117*\u112*\u95*\u99*\u111*\u110*\u115*\u116*\u114*\u97*\u105*\u110*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u104*\u97*\u114*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u101*\u97*\u109*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u121*\u112*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u112*\u100*\u97*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u67*\u104*\u97*\u110*\u110*\u101*\u108*\u73*\u110*\u102*\u111*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u97*\u109*\u101*\u32*\u118*\u97*\u108*\u117*\u101*\u32*\u97*\u115*\u32*\u67*\u104*\u97*\u110*\u110*\u101*\u108*\u46*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*\u44*\u32*\u70*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u103*\u117*\u101*\u115*\u116*\u95*\u99*\u111*\u117*\u110*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u104*\u101*\u97*\u100*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u109*\u101*\u109*\u98*\u101*\u114*\u95*\u99*\u111*\u117*\u110*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u112*\u105*\u110*\u110*\u101*\u100*\u95*\u112*\u111*\u115*\u116*\u95*\u99*\u111*\u117*\u110*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u102*\u105*\u108*\u101*\u115*\u95*\u99*\u111*\u117*\u110*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u112*\u117*\u114*\u112*\u111*\u115*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u67*\u104*\u97*\u110*\u110*\u101*\u108*\u77*\u101*\u109*\u98*\u101*\u114*\u115*\u104*\u105*\u112*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u111*\u109*\u112*\u111*\u115*\u105*\u116*\u105*\u111*\u110*\u32*\u73*\u68*\u32*\u67*\u104*\u97*\u110*\u110*\u101*\u108*\u46*\u105*\u100*\u45*\u85*\u115*\u101*\u114*\u46*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u104*\u97*\u110*\u110*\u101*\u108*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u115*\u101*\u114*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u99*\u104*\u101*\u109*\u101*\u95*\u97*\u100*\u109*\u105*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u67*\u117*\u115*\u116*\u111*\u109*\u69*\u109*\u111*\u106*\u105*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u117*\u116*\u111*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u68*\u114*\u97*\u102*\u116*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u117*\u116*\u111*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u104*\u97*\u110*\u110*\u101*\u108*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u102*\u105*\u108*\u101*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*\u105*\u102*\u121*\u32*\u40*\u97*\u114*\u114*\u97*\u121*\u41*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u109*\u101*\u115*\u115*\u97*\u103*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u114*\u111*\u111*\u116*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u78*\u85*\u76*\u76*\u65*\u66*\u76*\u69*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u112*\u100*\u97*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u70*\u105*\u108*\u101*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u101*\u114*\u118*\u101*\u114*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u101*\u120*\u116*\u101*\u110*\u115*\u105*\u111*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u104*\u101*\u105*\u103*\u104*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u109*\u97*\u103*\u101*\u95*\u116*\u104*\u117*\u109*\u98*\u110*\u97*\u105*\u108*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u97*\u115*\u101*\u54*\u52*\u32*\u100*\u97*\u116*\u97*\u32*\u115*\u116*\u114*\u105*\u110*\u103*\u32*\u111*\u114*\u32*\u102*\u105*\u108*\u101*\u112*\u97*\u116*\u104*\u32*\u102*\u111*\u114*\u32*\u118*\u105*\u100*\u101*\u111*\u32*\u116*\u104*\u117*\u109*\u98*\u110*\u97*\u105*\u108*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u111*\u99*\u97*\u108*\u95*\u112*\u97*\u116*\u104*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u78*\u85*\u76*\u76*\u65*\u66*\u76*\u69*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u109*\u105*\u109*\u101*\u95*\u116*\u121*\u112*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u112*\u111*\u115*\u116*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u105*\u122*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u119*\u105*\u100*\u116*\u104*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u71*\u114*\u111*\u117*\u112*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u101*\u114*\u118*\u101*\u114*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u105*\u115*\u112*\u108*\u97*\u121*\u95*\u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u114*\u101*\u109*\u111*\u116*\u101*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u111*\u117*\u114*\u99*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u114*\u101*\u97*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u112*\u100*\u97*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u101*\u108*\u101*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u71*\u114*\u111*\u117*\u112*\u67*\u104*\u97*\u110*\u110*\u101*\u108*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u111*\u109*\u112*\u111*\u115*\u105*\u116*\u105*\u111*\u110*\u32*\u73*\u68*\u32*\u71*\u114*\u111*\u117*\u112*\u46*\u105*\u100*\u45*\u67*\u104*\u97*\u110*\u110*\u101*\u108*\u46*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u103*\u114*\u111*\u117*\u112*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u104*\u97*\u110*\u110*\u101*\u108*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u114*\u101*\u97*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u112*\u100*\u97*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u101*\u108*\u101*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u71*\u114*\u111*\u117*\u112*\u77*\u101*\u109*\u98*\u101*\u114*\u115*\u104*\u105*\u112*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u111*\u109*\u112*\u111*\u115*\u105*\u116*\u105*\u111*\u110*\u32*\u73*\u68*\u32*\u71*\u114*\u111*\u117*\u112*\u46*\u105*\u100*\u45*\u85*\u115*\u101*\u114*\u46*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u103*\u114*\u111*\u117*\u112*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u115*\u101*\u114*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u114*\u101*\u97*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u112*\u100*\u97*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u101*\u108*\u101*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u71*\u114*\u111*\u117*\u112*\u84*\u101*\u97*\u109*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u111*\u109*\u112*\u111*\u115*\u105*\u116*\u105*\u111*\u110*\u32*\u73*\u68*\u32*\u71*\u114*\u111*\u117*\u112*\u46*\u105*\u100*\u45*\u84*\u101*\u97*\u109*\u46*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u103*\u114*\u111*\u117*\u112*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u101*\u97*\u109*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u114*\u101*\u97*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u112*\u100*\u97*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u101*\u108*\u101*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u77*\u121*\u67*\u104*\u97*\u110*\u110*\u101*\u108*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u97*\u109*\u101*\u32*\u97*\u115*\u32*\u67*\u104*\u97*\u110*\u110*\u101*\u108*\u46*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*\u44*\u32*\u70*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u115*\u95*\u117*\u110*\u114*\u101*\u97*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*\u101*\u97*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u97*\u115*\u116*\u95*\u112*\u111*\u115*\u116*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u97*\u115*\u116*\u95*\u118*\u105*\u101*\u119*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u109*\u97*\u110*\u117*\u97*\u108*\u108*\u121*\u95*\u117*\u110*\u114*\u101*\u97*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*\u101*\u97*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u109*\u101*\u110*\u116*\u105*\u111*\u110*\u115*\u95*\u99*\u111*\u117*\u110*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u109*\u101*\u115*\u115*\u97*\u103*\u101*\u95*\u99*\u111*\u117*\u110*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u114*\u111*\u108*\u101*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u118*\u105*\u101*\u119*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u77*\u121*\u67*\u104*\u97*\u110*\u110*\u101*\u108*\u83*\u101*\u116*\u116*\u105*\u110*\u103*\u115*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u97*\u109*\u101*\u32*\u97*\u115*\u32*\u67*\u104*\u97*\u110*\u110*\u101*\u108*\u46*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*\u44*\u32*\u70*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u111*\u116*\u105*\u102*\u121*\u95*\u112*\u114*\u111*\u112*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u77*\u121*\u84*\u101*\u97*\u109*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u97*\u109*\u101*\u32*\u97*\u115*\u32*\u84*\u101*\u97*\u109*\u46*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*\u44*\u32*\u70*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u114*\u111*\u108*\u101*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u80*\u111*\u115*\u116*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u101*\u114*\u118*\u101*\u114*\u32*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u104*\u97*\u110*\u110*\u101*\u108*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u114*\u101*\u97*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u101*\u108*\u101*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u101*\u100*\u105*\u116*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u115*\u95*\u112*\u105*\u110*\u110*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*\u101*\u97*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u109*\u101*\u115*\u115*\u97*\u103*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u109*\u101*\u116*\u97*\u100*\u97*\u116*\u97*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u78*\u85*\u76*\u76*\u65*\u66*\u76*\u69*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u111*\u114*\u105*\u103*\u105*\u110*\u97*\u108*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u112*\u101*\u110*\u100*\u105*\u110*\u103*\u95*\u112*\u111*\u115*\u116*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u112*\u114*\u101*\u118*\u105*\u111*\u117*\u115*\u95*\u112*\u111*\u115*\u116*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u112*\u114*\u111*\u112*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u114*\u111*\u111*\u116*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u121*\u112*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u112*\u100*\u97*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u115*\u101*\u114*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u80*\u111*\u115*\u116*\u115*\u73*\u110*\u67*\u104*\u97*\u110*\u110*\u101*\u108*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u117*\u116*\u111*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u104*\u97*\u110*\u110*\u101*\u108*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u101*\u97*\u114*\u108*\u105*\u101*\u115*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u97*\u116*\u101*\u115*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u80*\u111*\u115*\u116*\u115*\u73*\u110*\u84*\u104*\u114*\u101*\u97*\u100*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u117*\u116*\u111*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u101*\u97*\u114*\u108*\u105*\u101*\u115*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u97*\u116*\u101*\u115*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u114*\u111*\u111*\u116*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u80*\u114*\u101*\u102*\u101*\u114*\u101*\u110*\u99*\u101*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u101*\u114*\u118*\u101*\u114*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u97*\u116*\u101*\u103*\u111*\u114*\u121*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u115*\u101*\u114*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u118*\u97*\u108*\u117*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u82*\u101*\u97*\u99*\u116*\u105*\u111*\u110*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u101*\u114*\u118*\u101*\u114*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u114*\u101*\u97*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u101*\u109*\u111*\u106*\u105*\u95*\u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u112*\u111*\u115*\u116*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u115*\u101*\u114*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u82*\u111*\u108*\u101*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u101*\u114*\u118*\u101*\u114*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u112*\u101*\u114*\u109*\u105*\u115*\u115*\u105*\u111*\u110*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*\u105*\u102*\u121*\u32*\u97*\u114*\u114*\u97*\u121*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u83*\u121*\u115*\u116*\u101*\u109*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u83*\u89*\u83*\u84*\u69*\u77*\u95*\u73*\u68*\u69*\u78*\u84*\u73*\u70*\u73*\u69*\u82*\u83*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u118*\u97*\u108*\u117*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u84*\u101*\u97*\u109*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u101*\u114*\u118*\u101*\u114*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u108*\u108*\u111*\u119*\u101*\u100*\u95*\u100*\u111*\u109*\u97*\u105*\u110*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u105*\u115*\u112*\u108*\u97*\u121*\u95*\u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u115*\u95*\u97*\u108*\u108*\u111*\u119*\u95*\u111*\u112*\u101*\u110*\u95*\u105*\u110*\u118*\u105*\u116*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*\u101*\u97*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u115*\u95*\u103*\u114*\u111*\u117*\u112*\u95*\u99*\u111*\u110*\u115*\u116*\u114*\u97*\u105*\u110*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*\u101*\u97*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u97*\u115*\u116*\u95*\u116*\u101*\u97*\u109*\u95*\u105*\u99*\u111*\u110*\u95*\u117*\u112*\u100*\u97*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u121*\u112*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u112*\u100*\u97*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u84*\u101*\u97*\u109*\u67*\u104*\u97*\u110*\u110*\u101*\u108*\u72*\u105*\u115*\u116*\u111*\u114*\u121*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u97*\u109*\u101*\u32*\u97*\u115*\u32*\u84*\u101*\u97*\u109*\u46*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*\u44*\u32*\u70*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u104*\u97*\u110*\u110*\u101*\u108*\u95*\u105*\u100*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*\u105*\u102*\u105*\u101*\u100*\u32*\u74*\u83*\u79*\u78*\u32*\u97*\u114*\u114*\u97*\u121*\u59*\u32*\u70*\u73*\u70*\u79*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u84*\u101*\u97*\u109*\u77*\u101*\u109*\u98*\u101*\u114*\u115*\u104*\u105*\u112*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u117*\u116*\u111*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u101*\u97*\u109*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u115*\u101*\u114*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u99*\u104*\u101*\u109*\u101*\u95*\u97*\u100*\u109*\u105*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u84*\u101*\u97*\u109*\u83*\u101*\u97*\u114*\u99*\u104*\u72*\u105*\u115*\u116*\u111*\u114*\u121*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u117*\u116*\u111*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u99*\u114*\u101*\u97*\u116*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u105*\u115*\u112*\u108*\u97*\u121*\u95*\u116*\u101*\u114*\u109*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u101*\u97*\u109*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u101*\u114*\u109*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u84*\u104*\u114*\u101*\u97*\u100*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u105*\u109*\u105*\u108*\u97*\u114*\u32*\u116*\u111*\u32*\u80*\u111*\u115*\u116*\u46*\u105*\u100*\u32*\u98*\u117*\u116*\u32*\u102*\u111*\u114*\u32*\u114*\u111*\u111*\u116*\u32*\u112*\u111*\u115*\u116*\u32*\u111*\u110*\u108*\u121*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*\u44*\u32*\u70*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u115*\u95*\u102*\u111*\u108*\u108*\u111*\u119*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*\u101*\u97*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u97*\u115*\u116*\u95*\u114*\u101*\u112*\u108*\u121*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u97*\u115*\u116*\u95*\u118*\u105*\u101*\u119*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u114*\u101*\u112*\u108*\u121*\u95*\u99*\u111*\u117*\u110*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u110*\u114*\u101*\u97*\u100*\u95*\u109*\u101*\u110*\u116*\u105*\u111*\u110*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u110*\u114*\u101*\u97*\u100*\u95*\u114*\u101*\u112*\u108*\u105*\u101*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u118*\u105*\u101*\u119*\u101*\u100*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u84*\u104*\u114*\u101*\u97*\u100*\u115*\u73*\u110*\u84*\u101*\u97*\u109*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u117*\u116*\u111*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u111*\u97*\u100*\u101*\u100*\u95*\u105*\u110*\u95*\u103*\u108*\u111*\u98*\u97*\u108*\u95*\u116*\u104*\u114*\u101*\u97*\u100*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*\u101*\u97*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u101*\u97*\u109*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u104*\u114*\u101*\u97*\u100*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u84*\u104*\u114*\u101*\u97*\u100*\u80*\u97*\u114*\u116*\u105*\u99*\u105*\u112*\u97*\u110*\u116*}\b0\f2\fs24\i0\cf70\par\pard\plain\s194\itap0\ql\fi0\lin0\rin0\sb0\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs20\i\cf70 \u119*\u104*\u111*\u32*\u105*\u115*\u32*\u112*\u97*\u114*\u116*\u105*\u99*\u105*\u112*\u97*\u116*\u105*\u110*\u103*\u32*\u105*\u110*\u32*\u116*\u104*\u105*\u115*\u32*\u99*\u111*\u110*\u118*\u101*\u114*\u115*\u97*\u116*\u105*\u111*\u110*}\b0\f2\fs20\i\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u117*\u116*\u111*\u45*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u104*\u114*\u101*\u97*\u100*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u115*\u101*\u114*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u70*\u75*\u44*\u32*\u73*\u78*\u68*\u69*\u88*}\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s167\itap0\ql\fi0\lin0\rin0\sb240\sa120\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b0\f2\fs24\i0\cf70 \u85*\u115*\u101*\u114*}\b0\f2\fs24\i0\cf70\par + +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat72\clcfpatraw72\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\brdrt\brdrnone\brdrw10\brdrcf13\brdrl\brdrnone\brdrw10\brdrcf13\brdrb\brdrnone\brdrw10\brdrcf13\brdrr\brdrnone\brdrw10\brdrcf13{\b\f2\fs16\i0\cf14 \u70*\u105*\u101*\u108*\u100*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u115*\u99*\u114*\u105*\u112*\u116*\u105*\u111*\u110*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u84*\u121*\u112*\u101*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u68*\u101*\u102*\u97*\u117*\u108*\u116*}\b\f2\fs16\i0\cf14\cell\pard\plain\s196\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b\f2\fs16\i0\cf14 \u79*\u116*\u104*\u101*\u114*}\b\f2\fs16\i0\cf14\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u101*\u114*\u118*\u101*\u114*\u32*\u103*\u101*\u110*\u101*\u114*\u97*\u116*\u101*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u80*\u75*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u97*\u117*\u116*\u104*\u95*\u115*\u101*\u114*\u118*\u105*\u99*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u100*\u101*\u108*\u101*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u101*\u109*\u97*\u105*\u108*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u102*\u105*\u114*\u115*\u116*\u95*\u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u115*\u95*\u98*\u111*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*\u101*\u97*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u105*\u115*\u95*\u103*\u117*\u101*\u115*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u98*\u111*\u111*\u108*\u101*\u97*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u97*\u115*\u116*\u95*\u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u97*\u115*\u116*\u95*\u112*\u105*\u99*\u116*\u117*\u114*\u101*\u95*\u117*\u112*\u100*\u97*\u116*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u108*\u111*\u99*\u97*\u108*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u105*\u99*\u107*\u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u111*\u116*\u105*\u102*\u121*\u95*\u112*\u114*\u111*\u112*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u112*\u111*\u115*\u105*\u116*\u105*\u111*\u110*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u112*\u114*\u111*\u112*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u114*\u101*\u109*\u111*\u116*\u101*\u95*\u105*\u100*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u78*\u85*\u76*\u76*\u65*\u66*\u76*\u69*}\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u114*\u111*\u108*\u101*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u97*\u116*\u117*\u115*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u116*\u105*\u109*\u101*\u122*\u111*\u110*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u112*\u100*\u97*\u116*\u101*\u95*\u97*\u116*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u110*\u117*\u109*\u98*\u101*\u114*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\trowd\trautofit0\trql\trftsWidth1\trwWidth0\trautofit0\trautofit0\tblind20\tblindtype3\trleft20\trpaddl0\trpaddr0\trpaddt0\trpaddb0\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trbrdrt\brdrnone\brdrcf-1\trbrdrl\brdrnone\brdrcf-1\trbrdrb\brdrnone\brdrcf-1\trbrdrr\brdrnone\brdrcf-1\trbrdrh\brdrnone\brdrcf-1\trbrdrv\brdrnone\brdrcf-1\tbllkhdrrows\tbllkhdrcols\tbllknocolband\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2268\clftsWidth3\cellx2288\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth2267\clftsWidth3\cellx4555\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1133\clftsWidth3\cellx5688\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1134\clftsWidth3\cellx6822\clNoWrap0\clpadt80\clpadft3\clpadr80\clpadfr3\clpadl80\clpadfl3\clpadb80\clpadfb3\clbrdrl\brdrnone\brdrcf-1\clbrdrt\brdrnone\brdrcf-1\clbrdrr\brdrnone\brdrcf-1\clbrdrb\brdrnone\brdrcf-1\clshdng0\clcbpat75\clcfpatraw75\cltxlrtb\clwWidth1135\clftsWidth3\cellx7957\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u117*\u115*\u101*\u114*\u110*\u97*\u109*\u101*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar{\b0\f2\fs16\i0\cf70 \u115*\u116*\u114*\u105*\u110*\u103*}\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\pard\plain\s195\intbl\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs16\i0\cf70\cell\row +\pard\plain\s165\itap0\ql\fi0\lin0\rin0\sb0\sa0\sl240\slmult1\ltrpar\b0\f2\fs20\i0\cf70\par +} + \ No newline at end of file diff --git a/docs/database/server/server-v2.sql b/docs/database/server/server-v3.sql similarity index 95% rename from docs/database/server/server-v2.sql rename to docs/database/server/server-v3.sql index cdb2b0dbf31..711957d3d0d 100644 --- a/docs/database/server/server-v2.sql +++ b/docs/database/server/server-v3.sql @@ -1,5 +1,5 @@ -- Exported from QuickDBD: https://www.quickdatabasediagrams.com/ --- Link to schema: https://app.quickdatabasediagrams.com/#/d/6OtugI +-- Link to schema: https://app.quickdatabasediagrams.com/#/d/PITc8R -- NOTE! If you have used non-SQL datatypes in your design, you will have to change these here. -- Server Database - Schema Version 2 @@ -101,6 +101,7 @@ CREATE TABLE [Draft] ( [files] string NOT NULL , [message] string NOT NULL , [root_id] string NULL , + [update_at] number NOT NULL , CONSTRAINT [PK_Draft] PRIMARY KEY CLUSTERED ( [id] ASC ) @@ -659,6 +660,9 @@ ON [Post] ([channel_id]) CREATE INDEX [idx_Post_pending_post_id] ON [Post] ([pending_post_id]) +CREATE INDEX [idx_Post_type] +ON [Post] ([type]) + CREATE INDEX [idx_Post_user_id] ON [Post] ([user_id]) @@ -695,4 +699,4 @@ ON [ThreadParticipant] ([thread_id]) CREATE INDEX [idx_ThreadParticipant_user_id] ON [ThreadParticipant] ([user_id]) -COMMIT TRANSACTION QUICKDBD \ No newline at end of file +COMMIT TRANSACTION QUICKDBD diff --git a/docs/database/server/server.md b/docs/database/server/server.md index 93b3f9bf214..9629fe0367c 100644 --- a/docs/database/server/server.md +++ b/docs/database/server/server.md @@ -1,4 +1,4 @@ -# Server Database - Schema Version 2 +# Server Database - Schema Version 3 # Please bump the version by 1, any time the schema changes. # Also, include the migration plan under app/database/migration/server, # update all models, relationships and types. @@ -166,7 +166,7 @@ pending_post_id string INDEX previous_post_id string props string root_id string -type string +type string INDEX update_at number user_id string INDEX FK >- User.id diff --git a/fastlane/Fastfile b/fastlane/Fastfile index a85ad4e9a28..55a451a6950 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -181,6 +181,12 @@ lane :configure do json['ShowOnboarding'] = true end + # Configure the auth schemes + auth_scheme = ENV['APP_AUTH_SCHEME'].to_s.empty? ? 'mmauth' : ENV['APP_AUTH_SCHEME'] + auth_scheme_dev = ENV['APP_AUTH_SCHEME_BETA'].to_s.empty? ? 'mmauthbeta' : ENV['APP_AUTH_SCHEME_BETA'] + json["AuthUrlScheme"] = auth_scheme.end_with?('://') ? auth_scheme : "#{auth_scheme}://" + json["AuthUrlSchemeDev"] = auth_scheme_dev.end_with?('://') ? auth_scheme_dev : "#{auth_scheme_dev}://" + # Save the config.json file save_json_as_file('../dist/assets/config.json', json) @@ -329,7 +335,7 @@ lane :github do android = [ " * [Mattermost arm64-v8a](https://releases.mattermost.com/mattermost-mobile/#{version}/#{build}/Mattermost-arm64-v8a.apk)", " * [Mattermost armeabi-v7a](https://releases.mattermost.com/mattermost-mobile/#{version}/#{build}/Mattermost-armeabi-v7a.apk)", - " * [Mattermost Universal](https://releases.mattermost.com/mattermost-mobile/#{version}/#{build}/Mattermost-universal.apk)", + " * [Mattermost Universal](https://releases.mattermost.com/mattermost-mobile/#{version}/#{build}/Mattermost.apk)", " * [Mattermost x86](https://releases.mattermost.com/mattermost-mobile/#{version}/#{build}/Mattermost-x86.apk)", " * [Mattermost x86_64](https://releases.mattermost.com/mattermost-mobile/#{version}/#{build}/Mattermost-x86_64.apk)", ] @@ -473,7 +479,8 @@ platform :ios do # Set the deep link prefix app_scheme = ENV['APP_SCHEME'] || 'mattermost' - app_auth_scheme = ENV['BETA_BUILD'] == 'true' ? 'mmauthbeta' : 'mmauth' + app_auth_scheme = get_auth_scheme + UI.success "Update auth scheme to #{app_auth_scheme} #{ENV['BETA_BUILD']} authScheme #{ENV['APP_AUTH_SCHEME']} beta #{ENV['APP_AUTH_SCHEME_BETA']}" update_info_plist( xcodeproj: './ios/Mattermost.xcodeproj', plist_path: 'Mattermost/Info.plist', @@ -648,7 +655,7 @@ platform :ios do app_name_sub = app_name.gsub(" ", "_") config_mode = ENV['BUILD_FOR_RELEASE'] == 'true' ? 'Release' : 'Debug' method = ENV['IOS_BUILD_EXPORT_METHOD'].nil? || ENV['IOS_BUILD_EXPORT_METHOD'].empty? ? 'ad-hoc' : ENV['IOS_BUILD_EXPORT_METHOD'] - + # Need to add xcargs to only notification and share extensions xcargs = ENV['SENTRY_ENABLED'] == 'true' ? "SENTRY_DSN_IOS='#{ENV['SENTRY_DSN_IOS']}' SENTRY_ENABLED='#{ENV['SENTRY_ENABLED']}'" : '' @@ -699,6 +706,7 @@ platform :android do end update_identifiers replace_assets + pinned_certificates link_sentry({:os_type => "android"}) build_android move_android_to_root @@ -747,13 +755,14 @@ platform :android do new_string: "scheme=\'#{app_scheme}\'" ) - if ENV['BETA_BUILD'] != 'true' - find_replace_string( - path_to_file: "./android/app/src/main/AndroidManifest.xml", - old_string: 'scheme="mmauthbeta"', - new_string: 'scheme="mmauth"', - ) - end + + app_auth_scheme = get_auth_scheme + + find_replace_string( + path_to_file: "./android/app/src/main/AndroidManifest.xml", + old_string: 'scheme="mmauthbeta"', + new_string: "scheme=\"#{app_auth_scheme}\"", + ) helpers_dir = './android/app/src/main/java/com/mattermost/helpers/' beta_dir = './android/app/src/main/java/com/mattermost/rnbeta/' @@ -812,6 +821,12 @@ platform :android do sh 'cp -R ../dist/assets/release/icons/android/* ../android/app/src/main/res/' sh 'cp -R ../dist/assets/release/splash_screen/android/* ../android/app/src/main/res/' end + sh 'mkdir -p ../android/app/src/main/res/raw/' + sh 'cp -R ../assets/sounds/* ../android/app/src/main/res/raw/' + end + + lane :pinned_certificates do + sh 'cp -R ../assets/certs/ ../android/app/src/main/assets/certs' end lane :deploy do |options| @@ -877,7 +892,7 @@ platform :android do if build_task.include?("assemble") apks = lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS] json_path = lane_context[SharedValues::GRADLE_OUTPUT_JSON_OUTPUT_PATH] - + if json_path.nil? || json_path.empty? dir_name = File.dirname(apks.first) json_path = Dir.glob(File.join(dir_name, '*.json')).first @@ -914,6 +929,14 @@ platform :android do end end +def get_auth_scheme + if ENV['BETA_BUILD'] == 'true' + ENV['APP_AUTH_SCHEME_BETA'].to_s.empty? ? 'mmauthbeta' : ENV['APP_AUTH_SCHEME_BETA'] + else + ENV['APP_AUTH_SCHEME'].to_s.empty? ? 'mmauth' : ENV['APP_AUTH_SCHEME'] + end +end + def load_config_json(json_path) config_file = File.read(json_path) JSON.parse(config_file) diff --git a/fastlane/Gemfile.lock b/fastlane/Gemfile.lock index c7d13a0c88c..31bf79f4837 100644 --- a/fastlane/Gemfile.lock +++ b/fastlane/Gemfile.lock @@ -7,29 +7,32 @@ GIT GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.6) + CFPropertyList (3.0.7) + base64 + nkf rexml - addressable (2.8.5) - public_suffix (>= 2.0.2, < 6.0) - artifactory (3.0.15) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + artifactory (3.0.17) atomos (0.1.3) - aws-eventstream (1.2.0) - aws-partitions (1.855.0) - aws-sdk-core (3.187.1) - aws-eventstream (~> 1, >= 1.0.2) + aws-eventstream (1.3.0) + aws-partitions (1.973.0) + aws-sdk-core (3.204.0) + aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) - aws-sigv4 (~> 1.5) + aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.72.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.138.0) - aws-sdk-core (~> 3, >= 3.181.0) + aws-sdk-kms (1.90.0) + aws-sdk-core (~> 3, >= 3.203.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.161.0) + aws-sdk-core (~> 3, >= 3.203.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.6) - aws-sigv4 (1.6.1) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.9.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) + base64 (0.2.0) claide (1.1.0) colored (1.2) colored2 (3.1.2) @@ -38,10 +41,10 @@ GEM declarative (0.0.20) digest-crc (0.6.5) rake (>= 12.0.0, < 14.0.0) - domain_name (0.6.20231109) + domain_name (0.6.20240107) dotenv (2.8.1) emoji_regex (3.2.3) - excon (0.104.0) + excon (0.111.0) faraday (1.10.3) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -63,22 +66,22 @@ GEM faraday-httpclient (1.0.1) faraday-multipart (1.0.4) multipart-post (~> 2) - faraday-net_http (1.0.1) + faraday-net_http (1.0.2) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) faraday-retry (1.0.3) faraday_middleware (1.2.0) faraday (~> 1.0) - fastimage (2.2.7) - fastlane (2.217.0) + fastimage (2.3.1) + fastlane (2.222.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) aws-sdk-s3 (~> 1.0) babosa (>= 1.0.3, < 2.0.0) bundler (>= 1.12.0, < 3.0.0) - colored + colored (~> 1.2) commander (~> 4.6) dotenv (>= 2.1.1, < 3.0.0) emoji_regex (>= 0.1, < 4.0) @@ -90,6 +93,7 @@ GEM gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-env (>= 1.6.0, < 2.0.0) google-cloud-storage (~> 1.31) highline (~> 2.0) http-cookie (~> 1.0.5) @@ -98,10 +102,10 @@ GEM mini_magick (>= 4.9.4, < 5.0.0) multipart-post (>= 2.0.0, < 3.0.0) naturally (~> 2.2) - optparse (~> 0.1.1) + optparse (>= 0.1.1, < 1.0.0) plist (>= 3.1.0, < 4.0.0) rubyzip (>= 2.0.0, < 3.0.0) - security (= 0.1.3) + security (= 0.1.5) simctl (~> 1.6.3) terminal-notifier (>= 2.0.0, < 3.0.0) terminal-table (~> 3) @@ -110,15 +114,15 @@ GEM word_wrap (~> 1.0.0) xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.3.0) - xcpretty-travis-formatter (>= 0.0.3) + xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) fastlane-plugin-android_change_package_identifier (0.1.0) fastlane-plugin-android_change_string_app_name (0.1.1) nokogiri fastlane-plugin-versioning_android (0.1.1) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.53.0) + google-apis-androidpublisher_v3 (0.54.0) google-apis-core (>= 0.11.0, < 2.a) - google-apis-core (0.11.2) + google-apis-core (0.11.3) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) httpclient (>= 2.8.1, < 3.a) @@ -126,24 +130,23 @@ GEM representable (~> 3.0) retriable (>= 2.0, < 4.a) rexml - webrick google-apis-iamcredentials_v1 (0.17.0) google-apis-core (>= 0.11.0, < 2.a) google-apis-playcustomapp_v1 (0.13.0) google-apis-core (>= 0.11.0, < 2.a) - google-apis-storage_v1 (0.29.0) + google-apis-storage_v1 (0.31.0) google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.6.0) - google-cloud-env (~> 1.0) + google-cloud-core (1.7.1) + google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.3.1) - google-cloud-storage (1.45.0) + google-cloud-errors (1.4.0) + google-cloud-storage (1.47.0) addressable (~> 2.8) digest-crc (~> 0.4) google-apis-iamcredentials_v1 (~> 0.1) - google-apis-storage_v1 (~> 0.29.0) + google-apis-storage_v1 (~> 0.31.0) google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) @@ -154,39 +157,43 @@ GEM os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.5) + http-cookie (1.0.7) domain_name (~> 0.5) httpclient (2.8.3) jmespath (1.6.2) - json (2.6.3) - jwt (2.7.1) - mini_magick (4.12.0) + json (2.7.2) + jwt (2.8.2) + base64 + mini_magick (4.13.2) mini_mime (1.1.5) multi_json (1.15.0) - multipart-post (2.3.0) + multipart-post (2.4.1) nanaimo (0.3.0) naturally (2.2.1) - nokogiri (1.15.5-arm64-darwin) + nkf (0.2.0) + nokogiri (1.16.7-arm64-darwin) + racc (~> 1.4) + nokogiri (1.16.7-x86_64-darwin) racc (~> 1.4) - nokogiri (1.15.5-x86_64-darwin) + nokogiri (1.16.7-x86_64-linux) racc (~> 1.4) - optparse (0.1.1) + optparse (0.5.0) os (1.1.4) - plist (3.7.0) - public_suffix (5.0.4) - racc (1.7.3) - rake (13.1.0) + plist (3.7.1) + public_suffix (6.0.1) + racc (1.8.1) + rake (13.2.1) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.2.6) + rexml (3.3.7) rouge (2.0.7) ruby2_keywords (0.0.5) rubyzip (2.3.2) - security (0.1.3) - signet (0.18.0) + security (0.1.5) + signet (0.19.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) @@ -199,20 +206,19 @@ GEM unicode-display_width (>= 1.1.1, < 3) trailblazer-option (0.1.2) tty-cursor (0.7.1) - tty-screen (0.8.1) + tty-screen (0.8.2) tty-spinner (0.9.3) tty-cursor (~> 0.7) uber (0.1.0) unicode-display_width (2.5.0) - webrick (1.8.1) word_wrap (1.0.0) - xcodeproj (1.23.0) + xcodeproj (1.25.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) - rexml (~> 3.2.4) + rexml (>= 3.3.2, < 4.0) xcpretty (0.3.0) rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) @@ -223,6 +229,7 @@ PLATFORMS arm64-darwin-23 x86_64-darwin-20 x86_64-darwin-23 + x86_64-linux DEPENDENCIES dotenv @@ -234,4 +241,4 @@ DEPENDENCIES nokogiri BUNDLED WITH - 2.3.26 + 2.5.11 diff --git a/ios/Gekidou/Sources/Gekidou/Bundle+Extensions.swift b/ios/Gekidou/Sources/Gekidou/Bundle+Extensions.swift new file mode 100644 index 00000000000..71feade2523 --- /dev/null +++ b/ios/Gekidou/Sources/Gekidou/Bundle+Extensions.swift @@ -0,0 +1,15 @@ +import Foundation + +extension Bundle { + static var app: Bundle { + var components = main.bundleURL.path.split(separator: "/") + var bundle: Bundle? + + if let index = components.lastIndex(where: { $0.hasSuffix(".app") }) { + components.removeLast((components.count - 1) - index) + bundle = Bundle(path: components.joined(separator: "/")) + } + + return bundle ?? main + } +} diff --git a/ios/Gekidou/Sources/Gekidou/Networking/Network+Delegate.swift b/ios/Gekidou/Sources/Gekidou/Networking/Network+Delegate.swift index 413da51e88a..e69ee25aa71 100644 --- a/ios/Gekidou/Sources/Gekidou/Networking/Network+Delegate.swift +++ b/ios/Gekidou/Sources/Gekidou/Networking/Network+Delegate.swift @@ -1,24 +1,120 @@ import Foundation +import os.log extension Network: URLSessionDelegate, URLSessionTaskDelegate { + typealias ChallengeEvaluation = (disposition: URLSession.AuthChallengeDisposition, credential: URLCredential?, error: NetworkError?) + public func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { - var credential: URLCredential? = nil - var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling + var evaluation: ChallengeEvaluation + switch challenge.protectionSpace.authenticationMethod { + #if canImport(Security) + case NSURLAuthenticationMethodServerTrust: + evaluation = attemptServerTrustAuthentication(with: challenge) + case NSURLAuthenticationMethodClientCertificate: + evaluation = attemptClientAuthentication(with: challenge) + #endif + default: + evaluation = (.performDefaultHandling, nil, nil) + } + + if let error = evaluation.error { + os_log("Gekidou: %{public}@", + log: .default, + type: .error, + error.localizedDescription + ) + } + + completionHandler(evaluation.disposition, evaluation.credential) + } + + func attemptClientAuthentication(with challenge: URLAuthenticationChallenge) -> ChallengeEvaluation{ + let host = challenge.protectionSpace.host + + guard let (identity, certificate) = try? Keychain.default.getClientIdentityAndCertificate(for: host) else { + return (.performDefaultHandling, nil, nil) + } + + return (.useCredential, URLCredential(identity: identity, + certificates: [certificate], + persistence: URLCredential.Persistence.permanent + ), nil) + } + + func attemptServerTrustAuthentication(with challenge: URLAuthenticationChallenge) -> ChallengeEvaluation { + let host = challenge.protectionSpace.host + + guard challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust, + let trust = challenge.protectionSpace.serverTrust + else { + return (.performDefaultHandling, nil, nil) + } + + do { + guard let certs = certificates[host], !certs.isEmpty else { + return (.performDefaultHandling, nil, nil) + } - let authMethod = challenge.protectionSpace.authenticationMethod - if authMethod == NSURLAuthenticationMethodClientCertificate { - let host = task.currentRequest!.url!.host! - if let (identity, certificate) = try? Keychain.default.getClientIdentityAndCertificate(for: host) { - credential = URLCredential(identity: identity, - certificates: [certificate], - persistence: URLCredential.Persistence.permanent) + try performDefaultValidation(trust) + + try performValidation(trust, forHost: host) + + try evaluate(trust, forHost: host, withCerts: certs) + + return (.useCredential, URLCredential(trust: trust), nil) + } catch { + os_log("Gekidou: %{public}@", + log: .default, + type: .error, + error.localizedDescription + ) + return (.cancelAuthenticationChallenge, nil, error as? NetworkError) + } + } + + private func getServerTrustCertificates(_ trust: SecTrust) -> [SecCertificate] { + if #available(iOS 15, macOS 12, tvOS 15, watchOS 8, visionOS 1, *) { + return (SecTrustCopyCertificateChain(trust) as? [SecCertificate]) ?? [] + } else { + return (0.. Void @@ -13,12 +14,15 @@ public class Network: NSObject { internal var session: URLSession? internal let queue = OperationQueue() internal let urlVersion = "/api/v4" + internal var certificates: [String: [SecCertificate]] = [:] @objc public static let `default` = Network() override private init() { super.init() + loadPinnedCertificates() + queue.maxConcurrentOperationCount = 1 let config = URLSessionConfiguration.default @@ -33,6 +37,41 @@ public class Network: NSObject { ) } + internal func loadPinnedCertificates() { + guard let certsPath = Bundle.app.resourceURL?.appendingPathComponent("certs") else { + return + } + + let fileManager = FileManager.default + do { + let certsArray = try fileManager.contentsOfDirectory(at: certsPath, includingPropertiesForKeys: nil, options: .skipsHiddenFiles) + let certs = certsArray.filter{ $0.pathExtension == "crt" || $0.pathExtension == "cer"} + for cert in certs { + if let domain = URL(string: cert.absoluteString)?.deletingPathExtension().lastPathComponent, + let certData = try? Data(contentsOf: cert), + let certificate = SecCertificateCreateWithData(nil, certData as CFData){ + if certificates[domain] != nil { + certificates[domain]?.append(certificate) + } else { + certificates[domain] = [certificate] + } + os_log("Gekidou: loaded certificate %{public}@ for domain %{public}@", + log: .default, + type: .info, + cert.lastPathComponent, domain + ) + } + } + } catch { + os_log( + "Gekidou: Error loading pinned certificates -- %{public}@", + log: .default, + type: .error, + String(describing: error) + ) + } + } + internal func buildApiUrl(_ serverUrl: String, _ endpoint: String) -> URL { return URL(string: "\(serverUrl)\(urlVersion)\(endpoint)")! } diff --git a/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension+Delegate.swift b/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension+Delegate.swift index f622c26b01d..ae71b1f3824 100644 --- a/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension+Delegate.swift +++ b/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension+Delegate.swift @@ -61,8 +61,9 @@ extension ShareExtension: URLSessionDataDelegate { let uploadData = getUploadSessionData(id: id) else { os_log( - OSLogType.default, "Mattermost BackgroundSession: didReceived failed to getUploadSessionData identifier=%{public}@", + log: .default, + type: .error, session.configuration.identifier ?? "no identifier" ) return @@ -95,6 +96,8 @@ extension ShareExtension: URLSessionDataDelegate { filename, fileId ) + + postMessageIfUploadFinished(forSession: session) } else { os_log( OSLogType.default, @@ -105,8 +108,9 @@ extension ShareExtension: URLSessionDataDelegate { } } catch { os_log( - OSLogType.default, "Mattermost BackgroundSession: Failed to receive data identifier=%{public}@ error=%{public}", + log: .default, + type: .error, id, error.localizedDescription ) @@ -116,48 +120,22 @@ extension ShareExtension: URLSessionDataDelegate { } public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - if error == nil, - let id = session.configuration.identifier { - guard let data = getUploadSessionData(id: id) - else { - os_log( - OSLogType.default, - "Mattermost BackgroundSession: didCompleteWithError delegate failed to getUploadSessionData identifier=%{public}@", - session.configuration.identifier ?? "no identifier" - ) - return - - } - - let total = data.totalFiles - let count = data.fileIds.count + if error != nil { os_log( - OSLogType.default, - "Mattermost BackgroundSession: didCompleteWithError delegate for identifier=%{public}@ total files %{public}@ of %{public}@", - id, - "\(count)", - "\(total)" - ) - if data.fileIds.count == data.totalFiles { - ProcessInfo().performExpiringActivity( - withReason: "Need to post the message") {expires in - os_log( - OSLogType.default, - "Mattermost BackgroundSession: posting message for identifier=%{public}@", - id - ) - self.postMessageForSession(withId: id) - self.urlSessionDidFinishEvents(forBackgroundURLSession: session) - } - } - } else if error != nil { - os_log( - OSLogType.default, "Mattermost BackgroundSession: didCompleteWithError delegate failed identifier=%{public}@ with error %{public}@", + log: .default, + type: .error, session.configuration.identifier ?? "no identifier", error?.localizedDescription ?? "no error description available" ) + return } + + os_log( + OSLogType.default, + "Mattermost BackgroundSession: didCompleteWithError delegate for identifier=%{public}@ after calling postMessageIfUploadFinished", + session.configuration.identifier ?? "no identifier" + ) } @@ -180,4 +158,45 @@ extension ShareExtension: URLSessionDataDelegate { } }) } + + private func postMessageIfUploadFinished(forSession session: URLSession) { + lock.lock() + defer { lock.unlock() } + + guard let id = session.configuration.identifier, let data = getUploadSessionData(id: id) + else { + os_log( + "Mattermost BackgroundSession: postMessageIfUploadFinished failed to getUploadSessionData identifier=%{public}@", + log: .default, + type: .error, + session.configuration.identifier ?? "no identifier" + ) + return + } + + let total = data.totalFiles + let count = data.fileIds.count + + if count == total { + os_log( + OSLogType.default, + "Mattermost BackgroundSession: posting message for identifier=%{public}@", + id + ) + + ProcessInfo().performExpiringActivity( + withReason: "Need to post the message") {expires in + self.postMessageForSession(withId: id) + self.urlSessionDidFinishEvents(forBackgroundURLSession: session) + } + } else { + os_log( + OSLogType.default, + "Mattermost BackgroundSession: finish uploading files %{public}@ of %{public}@ for identifier=%{public}@", + "\(count)", + "\(total)", + id + ) + } + } } diff --git a/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension+Post.swift b/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension+Post.swift index 968feda623c..8e548b41069 100644 --- a/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension+Post.swift +++ b/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension+Post.swift @@ -98,9 +98,11 @@ extension ShareExtension { id ) return - } + self.removeUploadSessionData(id: id) + self.deleteUploadedFiles(files: data.files) + if let serverUrl = data.serverUrl, let channelId = data.channelId { Network.default.createPost( @@ -109,8 +111,15 @@ extension ShareExtension { message: data.message, fileIds: data.fileIds, completionHandler: {info, reponse, error in - self.removeUploadSessionData(id: id) - self.deleteUploadedFiles(files: data.files) + if let err = error { + os_log( + "Mattermost BackgroundSession: error to create post for session identifier=%{public}@ -- %{public}@", + log: .default, + type: .error, + id, + err.localizedDescription + ) + } if let handler = completionHandler { os_log( diff --git a/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension.swift b/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension.swift index 64504061f9f..24b13733ee5 100644 --- a/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension.swift +++ b/ios/Gekidou/Sources/Gekidou/Networking/ShareExtension.swift @@ -54,6 +54,7 @@ public class ShareExtension: NSObject { private let fileMgr = FileManager.default private let preferences = Preferences.default public var completionHandler: (() -> Void)? + internal let lock = NSLock() public override init() { super.init() diff --git a/ios/Gekidou/Sources/Gekidou/PushNotification/PushNotification.swift b/ios/Gekidou/Sources/Gekidou/PushNotification/PushNotification.swift index 4e67f2c461b..e91c65e70fb 100644 --- a/ios/Gekidou/Sources/Gekidou/PushNotification/PushNotification.swift +++ b/ios/Gekidou/Sources/Gekidou/PushNotification/PushNotification.swift @@ -34,7 +34,7 @@ public class PushNotification: NSObject { "Mattermost Notifications: process receipt response for serverUrl %{public}@ does not contain data", ackNotification.serverUrl ) - completionHandler(notification) + completionHandler(nil) return } notification.userInfo["server_url"] = ackNotification.serverUrl @@ -75,9 +75,14 @@ public class PushNotification: NSObject { url, withMethod: "POST", withBody: jsonData, andHeaders: headers, forServerUrl: ackNotification.serverUrl) {[weak self] data, response, error in if error != nil && ackNotification.isIdLoaded, + let nsError = error as? NSError, let fibonacciBackoffsInSeconds = self?.fibonacciBackoffsInSeconds, let retryIndex = self?.retryIndex, fibonacciBackoffsInSeconds.count > retryIndex { + if nsError.code == NSURLErrorCancelled { + completionHandler(nil) + return + } let backoffInSeconds = fibonacciBackoffsInSeconds[retryIndex] self?.retryIndex += 1 diff --git a/ios/Gekidou/Sources/Gekidou/Storage/Database.swift b/ios/Gekidou/Sources/Gekidou/Storage/Database.swift index 1caf68c4a7c..8e5314a86a2 100644 --- a/ios/Gekidou/Sources/Gekidou/Storage/Database.swift +++ b/ios/Gekidou/Sources/Gekidou/Storage/Database.swift @@ -9,6 +9,8 @@ import Foundation import SQLite3 import SQLite +typealias Expression = SQLite.Expression + enum DatabaseError: Error { case OpenFailure(_ dbPath: String) case MultipleServers @@ -87,20 +89,7 @@ public class Database: NSObject { } public func generateId() -> String { - let alphabet = Array("0123456789abcdefghijklmnopqrstuvwxyz") - let alphabetLenght = alphabet.count - let idLenght = 16 - var id = "" - - for _ in 1...(idLenght / 2) { - let random = floor(Double.random(in: 0..<1) * Double(alphabetLenght) * Double(alphabetLenght)) - let firstIndex = Int(floor(random / Double(alphabetLenght))) - let lastIndex = Int(random) % alphabetLenght - id += String(alphabet[firstIndex]) - id += String(alphabet[lastIndex]) - } - - return id + return UUID().uuidString.lowercased() } public func getOnlyServerUrl() throws -> String { diff --git a/ios/Mattermost.xcodeproj/project.pbxproj b/ios/Mattermost.xcodeproj/project.pbxproj index d04e72bdaf3..60ea513576c 100644 --- a/ios/Mattermost.xcodeproj/project.pbxproj +++ b/ios/Mattermost.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 1AC06461F0B9867B11829943 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C9C33C1C823BB8E1B3E161 /* ExpoModulesProvider.swift */; }; 27C667A329523ECA00E590D5 /* Sentry in Frameworks */ = {isa = PBXBuildFile; productRef = 27C667A229523ECA00E590D5 /* Sentry */; }; 27C667A529523F0A00E590D5 /* Sentry in Frameworks */ = {isa = PBXBuildFile; productRef = 27C667A429523F0A00E590D5 /* Sentry */; }; 27C667A9295241B600E590D5 /* Sentry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27C667A8295241B600E590D5 /* Sentry.swift */; }; @@ -18,49 +19,28 @@ 49AE370126D4455D00EF4E52 /* Gekidou in Frameworks */ = {isa = PBXBuildFile; productRef = 49AE370026D4455D00EF4E52 /* Gekidou */; }; 536CC6C323E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 536CC6C123E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.m */; }; 58495E36BF1A4EAB93609E57 /* Metropolis-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 54956DEFEBB74EF78C3A6AE5 /* Metropolis-SemiBold.ttf */; }; - 672D988729F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984629F1927E004228D6 /* InfoPlist.strings */; }; 672D988829F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984629F1927E004228D6 /* InfoPlist.strings */; }; - 672D988929F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984929F1927E004228D6 /* InfoPlist.strings */; }; 672D988A29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984929F1927E004228D6 /* InfoPlist.strings */; }; - 672D988B29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984C29F1927E004228D6 /* InfoPlist.strings */; }; 672D988C29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984C29F1927E004228D6 /* InfoPlist.strings */; }; - 672D988D29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984F29F1927F004228D6 /* InfoPlist.strings */; }; 672D988E29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984F29F1927F004228D6 /* InfoPlist.strings */; }; - 672D988F29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985229F1927F004228D6 /* InfoPlist.strings */; }; 672D989029F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985229F1927F004228D6 /* InfoPlist.strings */; }; - 672D989129F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985529F1927F004228D6 /* InfoPlist.strings */; }; 672D989229F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985529F1927F004228D6 /* InfoPlist.strings */; }; - 672D989329F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985829F1927F004228D6 /* InfoPlist.strings */; }; 672D989429F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985829F1927F004228D6 /* InfoPlist.strings */; }; - 672D989529F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985B29F1927F004228D6 /* InfoPlist.strings */; }; 672D989629F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985B29F1927F004228D6 /* InfoPlist.strings */; }; - 672D989729F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985E29F1927F004228D6 /* InfoPlist.strings */; }; 672D989829F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985E29F1927F004228D6 /* InfoPlist.strings */; }; - 672D989929F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986129F1927F004228D6 /* InfoPlist.strings */; }; 672D989A29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986129F1927F004228D6 /* InfoPlist.strings */; }; - 672D989B29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986429F1927F004228D6 /* InfoPlist.strings */; }; 672D989C29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986429F1927F004228D6 /* InfoPlist.strings */; }; 672D989D29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986729F1927F004228D6 /* InfoPlist.strings */; }; 672D989E29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986729F1927F004228D6 /* InfoPlist.strings */; }; - 672D989F29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986A29F1927F004228D6 /* InfoPlist.strings */; }; 672D98A029F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986A29F1927F004228D6 /* InfoPlist.strings */; }; - 672D98A129F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986D29F1927F004228D6 /* InfoPlist.strings */; }; 672D98A229F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986D29F1927F004228D6 /* InfoPlist.strings */; }; - 672D98A329F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987029F1927F004228D6 /* InfoPlist.strings */; }; 672D98A429F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987029F1927F004228D6 /* InfoPlist.strings */; }; - 672D98A529F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987329F1927F004228D6 /* InfoPlist.strings */; }; 672D98A629F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987329F1927F004228D6 /* InfoPlist.strings */; }; - 672D98A729F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987629F1927F004228D6 /* InfoPlist.strings */; }; 672D98A829F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987629F1927F004228D6 /* InfoPlist.strings */; }; - 672D98A929F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987929F1927F004228D6 /* InfoPlist.strings */; }; 672D98AA29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987929F1927F004228D6 /* InfoPlist.strings */; }; - 672D98AB29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987C29F1927F004228D6 /* InfoPlist.strings */; }; 672D98AC29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987C29F1927F004228D6 /* InfoPlist.strings */; }; - 672D98AD29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987F29F1927F004228D6 /* InfoPlist.strings */; }; 672D98AE29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987F29F1927F004228D6 /* InfoPlist.strings */; }; - 672D98AF29F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D988229F1927F004228D6 /* InfoPlist.strings */; }; 672D98B029F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D988229F1927F004228D6 /* InfoPlist.strings */; }; - 672D98B129F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D988529F1927F004228D6 /* InfoPlist.strings */; }; 672D98B229F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D988529F1927F004228D6 /* InfoPlist.strings */; }; 67AE0FC52A0556A500810C56 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67AE0FC32A0556A500810C56 /* Localizable.strings */; }; 67FEADD92A0E96DD00DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADD62A0E96DD00DDF4AE /* Localizable.strings */; }; @@ -85,7 +65,6 @@ 67FEAE292A1261A000DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE262A1261A000DDF4AE /* Localizable.strings */; }; 67FEAE2A2A1261EA00DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADFA2A1260B900DDF4AE /* Localizable.strings */; }; 67FEAE2C2A127C3600DDF4AE /* NumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67FEAE2B2A127C3600DDF4AE /* NumberFormatter.swift */; }; - 6C9B1EFD6561083917AF06CF /* libPods-Mattermost.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DEEFB3ED6175724A2653247 /* libPods-Mattermost.a */; }; 7F0F4B0A24BA173900E14C60 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7F0F4B0924BA173900E14C60 /* LaunchScreen.storyboard */; }; 7F151D3E221B062700FAD8F3 /* RuntimeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */; }; 7F1EB88527FDE361002E7EEC /* GekidouWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1EB88427FDE361002E7EEC /* GekidouWrapper.swift */; }; @@ -98,8 +77,27 @@ 7F537B2928A517580086D6B3 /* NotificationHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F537B2828A517580086D6B3 /* NotificationHelper.swift */; }; 7F581D35221ED5C60099E66B /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F581D34221ED5C60099E66B /* NotificationService.swift */; }; 7F581D39221ED5C60099E66B /* NotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 7F581D32221ED5C60099E66B /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 7F59882B29827F2200C8C108 /* SplitViewModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F59882A29827F2200C8C108 /* SplitViewModule.swift */; }; - 7F59882E2982850000C8C108 /* SplitViewModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F59882D2982850000C8C108 /* SplitViewModule.m */; }; + 7F6E6D592BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985229F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D5A2BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985E29F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D5B2BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984629F1927E004228D6 /* InfoPlist.strings */; }; + 7F6E6D5C2BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986A29F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D5D2BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987929F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D5E2BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984C29F1927E004228D6 /* InfoPlist.strings */; }; + 7F6E6D5F2BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987029F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D602BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986D29F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D612BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987C29F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D622BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984929F1927E004228D6 /* InfoPlist.strings */; }; + 7F6E6D632BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987329F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D642BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987F29F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D652BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D984F29F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D662BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D988229F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D672BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985B29F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D682BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985829F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D692BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D985529F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D6A2BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986129F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D6B2BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D988529F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D6C2BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D987629F1927F004228D6 /* InfoPlist.strings */; }; + 7F6E6D6D2BEA215C0003F141 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D986429F1927F004228D6 /* InfoPlist.strings */; }; 7F7E9F462864E6C60064BFAF /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F7E9F442864E6C60064BFAF /* Color.swift */; }; 7F7E9F472864E6C60064BFAF /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F7E9F452864E6C60064BFAF /* View.swift */; }; 7F7E9F4C2864E6EC0064BFAF /* AttachmentModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F7E9F492864E6EB0064BFAF /* AttachmentModel.swift */; }; @@ -170,10 +168,14 @@ 7FD482672864DC5900A5B18B /* OpenSans-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BC977883E2624E05975CA65B /* OpenSans-Regular.ttf */; }; 7FD482682864DC5900A5B18B /* OpenSans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E5C16B14E1CE4868886A1A00 /* OpenSans-SemiBold.ttf */; }; 7FD482692864DC5900A5B18B /* OpenSans-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0DB14DFDF6E04FA69FE769DC /* OpenSans-SemiBoldItalic.ttf */; }; - 7FEB109D1F61019C0039A015 /* MattermostManaged.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FEB109A1F61019C0039A015 /* MattermostManaged.m */; }; - 7FEC870128A4325D00DE96CB /* NotificationsModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FEC870028A4325D00DE96CB /* NotificationsModule.m */; }; + 7FDEF5362C2D01CC0093AADB /* certs in Resources */ = {isa = PBXBuildFile; fileRef = 7FDEF5352C2D01CC0093AADB /* certs */; }; 7FF9C03D2983E7C6005CDCF5 /* ErrorSharingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FF9C03C2983E7C6005CDCF5 /* ErrorSharingView.swift */; }; + 83ABFD122C1C90D90029685B /* calls_dynamic.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 83ABFD0E2C1C90D90029685B /* calls_dynamic.mp3 */; }; + 83ABFD132C1C90D90029685B /* calls_cheerful.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 83ABFD0F2C1C90D90029685B /* calls_cheerful.mp3 */; }; + 83ABFD142C1C90D90029685B /* calls_calm.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 83ABFD102C1C90D90029685B /* calls_calm.mp3 */; }; + 83ABFD152C1C90D90029685B /* calls_urgent.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 83ABFD112C1C90D90029685B /* calls_urgent.mp3 */; }; A94508A396424B2DB778AFE9 /* OpenSans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E5C16B14E1CE4868886A1A00 /* OpenSans-SemiBold.ttf */; }; + C84AE74C57DDE97D6C3D6924 /* libPods-Mattermost.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A83BBA09DE89A630126EA06 /* libPods-Mattermost.a */; }; C9A107102BBD7C8700753CDC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C9A1070F2BBD7C8700753CDC /* PrivacyInfo.xcprivacy */; }; C9A107122BBDA00200753CDC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C9A107112BBDA00200753CDC /* PrivacyInfo.xcprivacy */; }; C9A107142BBDBC8F00753CDC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C9A107132BBDBC8F00753CDC /* PrivacyInfo.xcprivacy */; }; @@ -231,10 +233,9 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Mattermost/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Mattermost/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Mattermost/main.m; sourceTree = ""; }; - 182D203F539AF68F1647EFAF /* Pods-Mattermost-MattermostTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mattermost-MattermostTests.release.xcconfig"; path = "Target Support Files/Pods-Mattermost-MattermostTests/Pods-Mattermost-MattermostTests.release.xcconfig"; sourceTree = ""; }; - 25BF2BACE89201DE6E585B7E /* Pods-Mattermost.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mattermost.release.xcconfig"; path = "Target Support Files/Pods-Mattermost/Pods-Mattermost.release.xcconfig"; sourceTree = ""; }; + 24C9C33C1C823BB8E1B3E161 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-Mattermost/ExpoModulesProvider.swift"; sourceTree = ""; }; 27C667A8295241B600E590D5 /* Sentry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sentry.swift; sourceTree = ""; }; - 297AAFCCF0BD99FC109DA2BC /* Pods-MattermostTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MattermostTests.release.xcconfig"; path = "Target Support Files/Pods-MattermostTests/Pods-MattermostTests.release.xcconfig"; sourceTree = ""; }; + 2E17B88EAD6181B9E9A24084 /* Pods-Mattermost.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mattermost.debug.xcconfig"; path = "Target Support Files/Pods-Mattermost/Pods-Mattermost.debug.xcconfig"; sourceTree = ""; }; 32AC3D4EA79E44738A6E9766 /* OpenSans-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-BoldItalic.ttf"; path = "../assets/fonts/OpenSans-BoldItalic.ttf"; sourceTree = ""; }; 3647DF63D6764CF093375861 /* OpenSans-ExtraBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-ExtraBold.ttf"; path = "../assets/fonts/OpenSans-ExtraBold.ttf"; sourceTree = ""; }; 41F3AFE83AAF4B74878AB78A /* OpenSans-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Italic.ttf"; path = "../assets/fonts/OpenSans-Italic.ttf"; sourceTree = ""; }; @@ -245,10 +246,9 @@ 49AE36FB26D4452900EF4E52 /* Gekidou */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Gekidou; sourceTree = ""; }; 49B4BF51230C83D2006E919E /* libz.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.dylib; path = ../../../../../../../../../usr/lib/libz.1.dylib; sourceTree = ""; }; 531BEBC52513E93C00BC05B1 /* compass-icons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "compass-icons.ttf"; path = "../assets/fonts/compass-icons.ttf"; sourceTree = ""; }; - 536CC6C123E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "RNNotificationEventHandler+HandleReplyAction.m"; path = "Mattermost/RNNotificationEventHandler+HandleReplyAction.m"; sourceTree = ""; }; - 536CC6C223E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "RNNotificationEventHandler+HandleReplyAction.h"; path = "Mattermost/RNNotificationEventHandler+HandleReplyAction.h"; sourceTree = ""; }; + 536CC6C123E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RNNotificationEventHandler+HandleReplyAction.m"; sourceTree = ""; }; + 536CC6C223E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RNNotificationEventHandler+HandleReplyAction.h"; sourceTree = ""; }; 54956DEFEBB74EF78C3A6AE5 /* Metropolis-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Metropolis-SemiBold.ttf"; path = "../assets/fonts/Metropolis-SemiBold.ttf"; sourceTree = ""; }; - 57CB4735B7E57B50D0B50E16 /* Pods-MattermostTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MattermostTests.debug.xcconfig"; path = "Target Support Files/Pods-MattermostTests/Pods-MattermostTests.debug.xcconfig"; sourceTree = ""; }; 6561AEAC21CC40B8A72ABB93 /* OpenSans-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Light.ttf"; path = "../assets/fonts/OpenSans-Light.ttf"; sourceTree = ""; }; 672D984729F1927E004228D6 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = InfoPlist.strings; sourceTree = ""; }; 672D984A29F1927E004228D6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = InfoPlist.strings; sourceTree = ""; }; @@ -296,8 +296,9 @@ 67FEAE272A1261A000DDF4AE /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = Localizable.strings; sourceTree = ""; }; 67FEAE2B2A127C3600DDF4AE /* NumberFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NumberFormatter.swift; sourceTree = ""; }; 6BAF8296411D4657B5A0E8F8 /* libRNReactNativeDocViewer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNReactNativeDocViewer.a; sourceTree = ""; }; + 7A83BBA09DE89A630126EA06 /* libPods-Mattermost.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Mattermost.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 7F0F4B0924BA173900E14C60 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = SplashScreenResource/LaunchScreen.storyboard; sourceTree = ""; }; - 7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuntimeUtils.swift; path = Mattermost/RuntimeUtils.swift; sourceTree = ""; }; + 7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RuntimeUtils.swift; sourceTree = ""; }; 7F151D43221B082A00FAD8F3 /* Mattermost-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Mattermost-Bridging-Header.h"; path = "Mattermost/Mattermost-Bridging-Header.h"; sourceTree = ""; }; 7F1EB88427FDE361002E7EEC /* GekidouWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GekidouWrapper.swift; sourceTree = ""; }; 7F1EBFCD286F2AE200824AF1 /* MultipleAttachmentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleAttachmentView.swift; sourceTree = ""; }; @@ -305,17 +306,14 @@ 7F25B626270F666D00F32373 /* Metropolis-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Metropolis-Light.ttf"; path = "../assets/fonts/Metropolis-Light.ttf"; sourceTree = ""; }; 7F25B628270F666D00F32373 /* Metropolis-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Metropolis-Regular.ttf"; path = "../assets/fonts/Metropolis-Regular.ttf"; sourceTree = ""; }; 7F292A701E8AB73400A450A3 /* SplashScreenResource */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SplashScreenResource; sourceTree = ""; }; - 7F325D6DAAF1047EB948EFF7 /* Pods-Mattermost-MattermostTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mattermost-MattermostTests.debug.xcconfig"; path = "Target Support Files/Pods-Mattermost-MattermostTests/Pods-Mattermost-MattermostTests.debug.xcconfig"; sourceTree = ""; }; 7F428809286672F6006B48E1 /* ServerService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerService.swift; sourceTree = ""; }; 7F42880B2866A9C0006B48E1 /* ChannelService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelService.swift; sourceTree = ""; }; 7F43D6051F6BF9EB001FC614 /* libPods-Mattermost.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libPods-Mattermost.a"; path = "../../../../../../../Library/Developer/Xcode/DerivedData/Mattermost-czlinsdviifujheezzjvmisotjrm/Build/Products/Debug-iphonesimulator/libPods-Mattermost.a"; sourceTree = ""; }; - 7F537B2828A517580086D6B3 /* NotificationHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NotificationHelper.swift; path = Mattermost/NotificationHelper.swift; sourceTree = ""; }; + 7F537B2828A517580086D6B3 /* NotificationHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationHelper.swift; sourceTree = ""; }; 7F581D32221ED5C60099E66B /* NotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 7F581D34221ED5C60099E66B /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; 7F581D36221ED5C60099E66B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7F581F77221EEA5A0099E66B /* NotificationService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NotificationService.entitlements; sourceTree = ""; }; - 7F59882A29827F2200C8C108 /* SplitViewModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SplitViewModule.swift; path = Mattermost/Modules/SplitViewModule.swift; sourceTree = ""; }; - 7F59882D2982850000C8C108 /* SplitViewModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SplitViewModule.m; path = Mattermost/Modules/SplitViewModule.m; sourceTree = ""; }; 7F63D2C21E6DD98A001FAE12 /* Mattermost.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Mattermost.entitlements; path = Mattermost/Mattermost.entitlements; sourceTree = ""; }; 7F7E9F442864E6C60064BFAF /* Color.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = ""; }; 7F7E9F452864E6C60064BFAF /* View.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = View.swift; sourceTree = ""; }; @@ -360,13 +358,10 @@ 7FC5698B28563FDB000B0905 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; 7FC5698D28563FDB000B0905 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7FC569962856436E000B0905 /* MattermostShare.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = MattermostShare.entitlements; sourceTree = ""; }; - 7FCEFB9126B7934F006DC1DE /* SDWebImageDownloaderOperation+Swizzle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "SDWebImageDownloaderOperation+Swizzle.h"; path = "Mattermost/SDWebImageDownloaderOperation+Swizzle.h"; sourceTree = ""; }; - 7FCEFB9226B7934F006DC1DE /* SDWebImageDownloaderOperation+Swizzle.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "SDWebImageDownloaderOperation+Swizzle.m"; path = "Mattermost/SDWebImageDownloaderOperation+Swizzle.m"; sourceTree = ""; }; + 7FCEFB9126B7934F006DC1DE /* SDWebImageDownloaderOperation+Swizzle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SDWebImageDownloaderOperation+Swizzle.h"; sourceTree = ""; }; + 7FCEFB9226B7934F006DC1DE /* SDWebImageDownloaderOperation+Swizzle.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SDWebImageDownloaderOperation+Swizzle.m"; sourceTree = ""; }; 7FD482282864D69700A5B18B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 7FEB10991F61019C0039A015 /* MattermostManaged.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MattermostManaged.h; path = Mattermost/MattermostManaged.h; sourceTree = ""; }; - 7FEB109A1F61019C0039A015 /* MattermostManaged.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MattermostManaged.m; path = Mattermost/MattermostManaged.m; sourceTree = ""; }; - 7FEC870028A4325D00DE96CB /* NotificationsModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NotificationsModule.m; path = Mattermost/NotificationsModule.m; sourceTree = ""; }; - 7FEC870428A44A7B00DE96CB /* NotificationsModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotificationsModule.h; path = Mattermost/NotificationsModule.h; sourceTree = ""; }; + 7FDEF5352C2D01CC0093AADB /* certs */ = {isa = PBXFileReference; lastKnownFileType = folder; name = certs; path = ../assets/certs; sourceTree = ""; }; 7FF9C03C2983E7C6005CDCF5 /* ErrorSharingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorSharingView.swift; sourceTree = ""; }; 7FFE32B51FD9CCAA0038C7A0 /* FLAnimatedImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = FLAnimatedImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7FFE32B61FD9CCAA0038C7A0 /* KSCrash.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = KSCrash.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -380,7 +375,10 @@ 7FFE32BE1FD9CCAA0038C7A0 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7FFE32BF1FD9CCAA0038C7A0 /* Sentry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Sentry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 81061F4CBB31484A94D5A8EE /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - 8DEEFB3ED6175724A2653247 /* libPods-Mattermost.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Mattermost.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 83ABFD0E2C1C90D90029685B /* calls_dynamic.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = calls_dynamic.mp3; path = ../assets/sounds/calls_dynamic.mp3; sourceTree = ""; }; + 83ABFD0F2C1C90D90029685B /* calls_cheerful.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = calls_cheerful.mp3; path = ../assets/sounds/calls_cheerful.mp3; sourceTree = ""; }; + 83ABFD102C1C90D90029685B /* calls_calm.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = calls_calm.mp3; path = ../assets/sounds/calls_calm.mp3; sourceTree = ""; }; + 83ABFD112C1C90D90029685B /* calls_urgent.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = calls_urgent.mp3; path = ../assets/sounds/calls_urgent.mp3; sourceTree = ""; }; BC977883E2624E05975CA65B /* OpenSans-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Regular.ttf"; path = "../assets/fonts/OpenSans-Regular.ttf"; sourceTree = ""; }; BE17F630DB5D41FD93F32D22 /* OpenSans-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-LightItalic.ttf"; path = "../assets/fonts/OpenSans-LightItalic.ttf"; sourceTree = ""; }; C9A1070F2BBD7C8700753CDC /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; @@ -388,8 +386,7 @@ C9A107132BBDBC8F00753CDC /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; D4B1B363C2414DA19C1AC521 /* OpenSans-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Bold.ttf"; path = "../assets/fonts/OpenSans-Bold.ttf"; sourceTree = ""; }; E5C16B14E1CE4868886A1A00 /* OpenSans-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-SemiBold.ttf"; path = "../assets/fonts/OpenSans-SemiBold.ttf"; sourceTree = ""; }; - EB4F0DF36537B0B21BE962FB /* Pods-Mattermost.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mattermost.debug.xcconfig"; path = "Target Support Files/Pods-Mattermost/Pods-Mattermost.debug.xcconfig"; sourceTree = ""; }; - F41672974C2907F74BB59B16 /* libPods-Mattermost-MattermostTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Mattermost-MattermostTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + E7BEDFCF1660521CCB3EADEF /* Pods-Mattermost.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mattermost.release.xcconfig"; path = "Target Support Files/Pods-Mattermost/Pods-Mattermost.release.xcconfig"; sourceTree = ""; }; FBBEC29EE2D3418D9AC33BD5 /* OpenSans-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-ExtraBoldItalic.ttf"; path = "../assets/fonts/OpenSans-ExtraBoldItalic.ttf"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -399,7 +396,7 @@ buildActionMask = 2147483647; files = ( 7F98836227FD46A9001C9BFC /* Gekidou in Frameworks */, - 6C9B1EFD6561083917AF06CF /* libPods-Mattermost.a in Frameworks */, + C84AE74C57DDE97D6C3D6924 /* libPods-Mattermost.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -477,6 +474,10 @@ FBBEC29EE2D3418D9AC33BD5 /* OpenSans-ExtraBoldItalic.ttf */, 41F3AFE83AAF4B74878AB78A /* OpenSans-Italic.ttf */, 6561AEAC21CC40B8A72ABB93 /* OpenSans-Light.ttf */, + 83ABFD102C1C90D90029685B /* calls_calm.mp3 */, + 83ABFD0F2C1C90D90029685B /* calls_cheerful.mp3 */, + 83ABFD0E2C1C90D90029685B /* calls_dynamic.mp3 */, + 83ABFD112C1C90D90029685B /* calls_urgent.mp3 */, BE17F630DB5D41FD93F32D22 /* OpenSans-LightItalic.ttf */, BC977883E2624E05975CA65B /* OpenSans-Regular.ttf */, E5C16B14E1CE4868886A1A00 /* OpenSans-SemiBold.ttf */, @@ -485,13 +486,20 @@ name = Resources; sourceTree = ""; }; + 0D52827284B080D9214D1C50 /* ExpoModulesProviders */ = { + isa = PBXGroup; + children = ( + C762A55DC3202B2296E0F5E2 /* Mattermost */, + ); + name = ExpoModulesProviders; + sourceTree = ""; + }; 13B07FAE1A68108700A75B9A /* Mattermost */ = { isa = PBXGroup; children = ( - 7F537B2128A514CB0086D6B3 /* Extensions */, - 7F537B2728A517430086D6B3 /* Helpers */, - 7F537B2428A515730086D6B3 /* Modules */, - 7F537B2328A515600086D6B3 /* Utils */, + 7FFD23BF2BFE008600FB34FA /* Extensions */, + 7FFD23BE2BFE004300FB34FA /* Helpers */, + 7FFD23C02BFE011400FB34FA /* Utils */, 7F537B2228A515400086D6B3 /* Wrappers */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 13B07FB01A68108700A75B9A /* AppDelegate.mm */, @@ -517,12 +525,8 @@ 33E107B4DC21A5C48B09F800 /* Pods */ = { isa = PBXGroup; children = ( - EB4F0DF36537B0B21BE962FB /* Pods-Mattermost.debug.xcconfig */, - 25BF2BACE89201DE6E585B7E /* Pods-Mattermost.release.xcconfig */, - 57CB4735B7E57B50D0B50E16 /* Pods-MattermostTests.debug.xcconfig */, - 297AAFCCF0BD99FC109DA2BC /* Pods-MattermostTests.release.xcconfig */, - 7F325D6DAAF1047EB948EFF7 /* Pods-Mattermost-MattermostTests.debug.xcconfig */, - 182D203F539AF68F1647EFAF /* Pods-Mattermost-MattermostTests.release.xcconfig */, + 2E17B88EAD6181B9E9A24084 /* Pods-Mattermost.debug.xcconfig */, + E7BEDFCF1660521CCB3EADEF /* Pods-Mattermost.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -556,8 +560,7 @@ 7FFE32BF1FD9CCAA0038C7A0 /* Sentry.framework */, 7F43D6051F6BF9EB001FC614 /* libPods-Mattermost.a */, 81061F4CBB31484A94D5A8EE /* libz.tbd */, - 8DEEFB3ED6175724A2653247 /* libPods-Mattermost.a */, - F41672974C2907F74BB59B16 /* libPods-Mattermost-MattermostTests.a */, + 7A83BBA09DE89A630126EA06 /* libPods-Mattermost.a */, ); name = Frameworks; sourceTree = ""; @@ -798,17 +801,6 @@ path = ViewModels; sourceTree = ""; }; - 7F537B2128A514CB0086D6B3 /* Extensions */ = { - isa = PBXGroup; - children = ( - 536CC6C223E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.h */, - 536CC6C123E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.m */, - 7FCEFB9126B7934F006DC1DE /* SDWebImageDownloaderOperation+Swizzle.h */, - 7FCEFB9226B7934F006DC1DE /* SDWebImageDownloaderOperation+Swizzle.m */, - ); - name = Extensions; - sourceTree = ""; - }; 7F537B2228A515400086D6B3 /* Wrappers */ = { isa = PBXGroup; children = ( @@ -817,35 +809,6 @@ name = Wrappers; sourceTree = ""; }; - 7F537B2328A515600086D6B3 /* Utils */ = { - isa = PBXGroup; - children = ( - 7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */, - ); - name = Utils; - sourceTree = ""; - }; - 7F537B2428A515730086D6B3 /* Modules */ = { - isa = PBXGroup; - children = ( - 7FEB10991F61019C0039A015 /* MattermostManaged.h */, - 7FEB109A1F61019C0039A015 /* MattermostManaged.m */, - 7FEC870428A44A7B00DE96CB /* NotificationsModule.h */, - 7FEC870028A4325D00DE96CB /* NotificationsModule.m */, - 7F59882A29827F2200C8C108 /* SplitViewModule.swift */, - 7F59882D2982850000C8C108 /* SplitViewModule.m */, - ); - name = Modules; - sourceTree = ""; - }; - 7F537B2728A517430086D6B3 /* Helpers */ = { - isa = PBXGroup; - children = ( - 7F537B2828A517580086D6B3 /* NotificationHelper.swift */, - ); - name = Helpers; - sourceTree = ""; - }; 7F581D33221ED5C60099E66B /* NotificationService */ = { isa = PBXGroup; children = ( @@ -1002,6 +965,36 @@ path = MattermostShare; sourceTree = ""; }; + 7FFD23BE2BFE004300FB34FA /* Helpers */ = { + isa = PBXGroup; + children = ( + 7F537B2828A517580086D6B3 /* NotificationHelper.swift */, + ); + name = Helpers; + path = Mattermost/Helpers; + sourceTree = ""; + }; + 7FFD23BF2BFE008600FB34FA /* Extensions */ = { + isa = PBXGroup; + children = ( + 536CC6C223E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.h */, + 536CC6C123E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.m */, + 7FCEFB9126B7934F006DC1DE /* SDWebImageDownloaderOperation+Swizzle.h */, + 7FCEFB9226B7934F006DC1DE /* SDWebImageDownloaderOperation+Swizzle.m */, + ); + name = Extensions; + path = Mattermost/Extensions; + sourceTree = ""; + }; + 7FFD23C02BFE011400FB34FA /* Utils */ = { + isa = PBXGroup; + children = ( + 7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */, + ); + name = Utils; + path = Mattermost/Utils; + sourceTree = ""; + }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( @@ -1013,6 +1006,7 @@ 83CBB9F61A601CBA00E9B192 = { isa = PBXGroup; children = ( + 7FDEF5352C2D01CC0093AADB /* certs */, 27C667AB2952425700E590D5 /* ErrorReporting */, 13B07FAE1A68108700A75B9A /* Mattermost */, 7F581D33221ED5C60099E66B /* NotificationService */, @@ -1025,6 +1019,7 @@ 37DF8AC51F5F0D410079BF89 /* Recovered References */, 4B992D7BAAEDF8759DB525B5 /* Frameworks */, 33E107B4DC21A5C48B09F800 /* Pods */, + 0D52827284B080D9214D1C50 /* ExpoModulesProviders */, ); indentWidth = 2; sourceTree = ""; @@ -1040,6 +1035,14 @@ name = Products; sourceTree = ""; }; + C762A55DC3202B2296E0F5E2 /* Mattermost */ = { + isa = PBXGroup; + children = ( + 24C9C33C1C823BB8E1B3E161 /* ExpoModulesProvider.swift */, + ); + name = Mattermost; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -1047,7 +1050,8 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Mattermost" */; buildPhases = ( - 484322B86D8320281D95970F /* [CP] Check Pods Manifest.lock */, + A5CD042BFDCAC871BAB5A03A /* [CP] Check Pods Manifest.lock */, + 37BA87DA6600D2B4EF69B92E /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, @@ -1055,8 +1059,8 @@ 37DA4BA41E6F55AD002B058E /* Embed Frameworks */, AE4769B235D14E6C9C64EA78 /* Upload Debug Symbols to Sentry */, 7FFE32A91FD9CB650038C7A0 /* Embed App Extensions */, - ED4C644925C525E30315E09E /* [CP] Copy Pods Resources */, - 791C6C6593EFE251279CC4E9 /* [CP] Embed Pods Frameworks */, + A40F47AC8A062DFCF1B2A23E /* [CP] Embed Pods Frameworks */, + 60D7AC7FCA7AC276C4308D05 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1194,8 +1198,8 @@ ); mainGroup = 83CBB9F61A601CBA00E9B192; packageReferences = ( - 7FD4822A2864D73300A5B18B /* XCRemoteSwiftPackageReference "OpenGraph.git" */, - 27C667A129523ECA00E590D5 /* XCRemoteSwiftPackageReference "sentry-cocoa.git" */, + 7FD4822A2864D73300A5B18B /* XCRemoteSwiftPackageReference "OpenGraph" */, + 27C667A129523ECA00E590D5 /* XCRemoteSwiftPackageReference "sentry-cocoa" */, ); productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; @@ -1213,46 +1217,51 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7FDEF5362C2D01CC0093AADB /* certs in Resources */, + 83ABFD132C1C90D90029685B /* calls_cheerful.mp3 in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, - 672D98A329F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D98A129F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D989B29F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D989329F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D98AD29F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D98A729F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D988D29F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D989729F1927F004228D6 /* InfoPlist.strings in Resources */, 7F0F4B0A24BA173900E14C60 /* LaunchScreen.storyboard in Resources */, 7F292A711E8AB73400A450A3 /* SplashScreenResource in Resources */, + C9A107102BBD7C8700753CDC /* PrivacyInfo.xcprivacy in Resources */, 7FB31F812710995B0032E2E5 /* Metropolis-Light.ttf in Resources */, 7FB31F822710996D0032E2E5 /* Metropolis-Regular.ttf in Resources */, 7FB31F842710996D0032E2E5 /* OpenSans-Bold.ttf in Resources */, 7FB31F852710996D0032E2E5 /* OpenSans-BoldItalic.ttf in Resources */, - 672D988729F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D98B129F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D989129F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D989D29F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D988F29F1927F004228D6 /* InfoPlist.strings in Resources */, 7FB31F862710996D0032E2E5 /* OpenSans-ExtraBold.ttf in Resources */, - 672D988B29F1927F004228D6 /* InfoPlist.strings in Resources */, 7FB31F872710996D0032E2E5 /* OpenSans-ExtraBoldItalic.ttf in Resources */, - 672D989929F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D989F29F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D988929F1927F004228D6 /* InfoPlist.strings in Resources */, 7FB31F882710996D0032E2E5 /* OpenSans-Italic.ttf in Resources */, - 672D98AB29F1927F004228D6 /* InfoPlist.strings in Resources */, 7FB31F892710996D0032E2E5 /* OpenSans-Light.ttf in Resources */, 7FB31F8A2710996D0032E2E5 /* OpenSans-LightItalic.ttf in Resources */, - 672D98AF29F1927F004228D6 /* InfoPlist.strings in Resources */, - 672D989529F1927F004228D6 /* InfoPlist.strings in Resources */, + 83ABFD122C1C90D90029685B /* calls_dynamic.mp3 in Resources */, + 83ABFD152C1C90D90029685B /* calls_urgent.mp3 in Resources */, + 83ABFD142C1C90D90029685B /* calls_calm.mp3 in Resources */, 7FB31F8B2710996D0032E2E5 /* OpenSans-Regular.ttf in Resources */, - 672D98A929F1927F004228D6 /* InfoPlist.strings in Resources */, 7FB31F8E2710996D0032E2E5 /* compass-icons.ttf in Resources */, 58495E36BF1A4EAB93609E57 /* Metropolis-SemiBold.ttf in Resources */, A94508A396424B2DB778AFE9 /* OpenSans-SemiBold.ttf in Resources */, - 672D98A529F1927F004228D6 /* InfoPlist.strings in Resources */, - C9A107102BBD7C8700753CDC /* PrivacyInfo.xcprivacy in Resources */, 02860A1AC3334896837E96B7 /* OpenSans-SemiBoldItalic.ttf in Resources */, + 672D989D29F1927F004228D6 /* InfoPlist.strings in Resources */, + 7F6E6D592BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D5A2BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D5B2BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D5C2BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D5D2BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D5E2BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D5F2BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D602BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D612BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D622BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D632BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D642BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D652BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D662BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D672BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D682BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D692BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D6A2BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D6B2BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D6C2BEA215C0003F141 /* InfoPlist.strings in Resources */, + 7F6E6D6D2BEA215C0003F141 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1351,63 +1360,26 @@ shellPath = /bin/sh; shellScript = "./bundleReactNative.sh\n"; }; - 484322B86D8320281D95970F /* [CP] Check Pods Manifest.lock */ = { + 37BA87DA6600D2B4EF69B92E /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; + name = "[Expo] Configure project"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Mattermost-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-Mattermost/expo-configure-project.sh\"\n"; }; - 791C6C6593EFE251279CC4E9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Mattermost/Pods-Mattermost-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiWebRTC/WebRTC.framework/WebRTC", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Mattermost/Pods-Mattermost-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - AE4769B235D14E6C9C64EA78 /* Upload Debug Symbols to Sentry */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Upload Debug Symbols to Sentry"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "./uploadDebugSymbols.sh\n"; - }; - ED4C644925C525E30315E09E /* [CP] Copy Pods Resources */ = { + 60D7AC7FCA7AC276C4308D05 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1416,6 +1388,11 @@ "${PODS_ROOT}/Target Support Files/Pods-Mattermost/Pods-Mattermost-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjackPrivacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXApplication/ExpoApplication_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoDevice/ExpoDevice_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", @@ -1438,12 +1415,19 @@ "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Sentry/Sentry.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/react-native-cameraroll/RNCameraRollPrivacyInfo.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Alamofire.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/CocoaLumberjackPrivacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoApplication_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoDevice_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", @@ -1466,13 +1450,71 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Sentry.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Starscream_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SwiftyJSON.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCameraRollPrivacyInfo.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Mattermost/Pods-Mattermost-resources.sh\"\n"; showEnvVarsInLog = 0; }; + A40F47AC8A062DFCF1B2A23E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Mattermost/Pods-Mattermost-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiWebRTC/WebRTC.framework/WebRTC", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Mattermost/Pods-Mattermost-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + A5CD042BFDCAC871BAB5A03A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Mattermost-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + AE4769B235D14E6C9C64EA78 /* Upload Debug Symbols to Sentry */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Upload Debug Symbols to Sentry"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "./uploadDebugSymbols.sh\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -1480,17 +1522,14 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7FEC870128A4325D00DE96CB /* NotificationsModule.m in Sources */, - 7F59882E2982850000C8C108 /* SplitViewModule.m in Sources */, 7F1EB88527FDE361002E7EEC /* GekidouWrapper.swift in Sources */, 7FCEFB9326B7934F006DC1DE /* SDWebImageDownloaderOperation+Swizzle.m in Sources */, 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, 7F151D3E221B062700FAD8F3 /* RuntimeUtils.swift in Sources */, 7F537B2928A517580086D6B3 /* NotificationHelper.swift in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, - 7F59882B29827F2200C8C108 /* SplitViewModule.swift in Sources */, - 7FEB109D1F61019C0039A015 /* MattermostManaged.m in Sources */, 536CC6C323E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.m in Sources */, + 1AC06461F0B9867B11829943 /* ExpoModulesProvider.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1937,7 +1976,7 @@ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EB4F0DF36537B0B21BE962FB /* Pods-Mattermost.debug.xcconfig */; + baseConfigurationReference = 2E17B88EAD6181B9E9A24084 /* Pods-Mattermost.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -1945,13 +1984,10 @@ CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 522; + CURRENT_PROJECT_VERSION = 569; DEVELOPMENT_TEAM = UQ8HT4Q2XM; ENABLE_BITCODE = NO; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/UploadAttachments/UploadAttachments", - ); + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Mattermost/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = ( @@ -1967,6 +2003,7 @@ "-ObjC", "-lc++", ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta; PRODUCT_NAME = Mattermost; PROVISIONING_PROFILE = ""; @@ -1981,7 +2018,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25BF2BACE89201DE6E585B7E /* Pods-Mattermost.release.xcconfig */; + baseConfigurationReference = E7BEDFCF1660521CCB3EADEF /* Pods-Mattermost.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -1989,13 +2026,10 @@ CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 522; + CURRENT_PROJECT_VERSION = 569; DEVELOPMENT_TEAM = UQ8HT4Q2XM; ENABLE_BITCODE = NO; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/UploadAttachments/UploadAttachments", - ); + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Mattermost/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = ( @@ -2008,6 +2042,7 @@ "-ObjC", "-lc++", ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta; PRODUCT_NAME = Mattermost; PROVISIONING_PROFILE = ""; @@ -2056,6 +2091,7 @@ "$(inherited)", "-DFB_SONARKIT_ENABLED=1", ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta.NotificationService; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -2100,6 +2136,7 @@ ); MTL_FAST_MATH = YES; OTHER_CFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta.NotificationService; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -2132,7 +2169,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 522; + CURRENT_PROJECT_VERSION = 569; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = UQ8HT4Q2XM; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -2147,6 +2184,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta.MattermostShare; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -2181,7 +2219,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 522; + CURRENT_PROJECT_VERSION = 569; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = UQ8HT4Q2XM; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -2195,6 +2233,7 @@ ); MARKETING_VERSION = 1.0; MTL_FAST_MATH = YES; + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta.MattermostShare; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -2210,6 +2249,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -2227,6 +2267,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + CXX = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; @@ -2247,15 +2288,21 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD = ""; + LDPLUSPLUS = ""; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "$(inherited)"; + OTHER_CFLAGS = ( + "$(inherited)", + "-DRN_FABRIC_ENABLED", + ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", "-DFOLLY_CFG_NO_COROUTINES=1", + "-DRN_FABRIC_ENABLED", ); OTHER_LDFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; @@ -2268,6 +2315,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -2285,6 +2333,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + CXX = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; @@ -2302,14 +2351,20 @@ GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD = ""; + LDPLUSPLUS = ""; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "$(inherited)"; + OTHER_CFLAGS = ( + "$(inherited)", + "-DRN_FABRIC_ENABLED", + ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", "-DFOLLY_CFG_NO_COROUTINES=1", + "-DRN_FABRIC_ENABLED", ); OTHER_LDFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; @@ -2361,15 +2416,15 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 27C667A129523ECA00E590D5 /* XCRemoteSwiftPackageReference "sentry-cocoa.git" */ = { + 27C667A129523ECA00E590D5 /* XCRemoteSwiftPackageReference "sentry-cocoa" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/getsentry/sentry-cocoa.git"; requirement = { kind = exactVersion; - version = 8.21.0; + version = 8.36.0; }; }; - 7FD4822A2864D73300A5B18B /* XCRemoteSwiftPackageReference "OpenGraph.git" */ = { + 7FD4822A2864D73300A5B18B /* XCRemoteSwiftPackageReference "OpenGraph" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/satoshi-takano/OpenGraph.git"; requirement = { @@ -2382,12 +2437,12 @@ /* Begin XCSwiftPackageProductDependency section */ 27C667A229523ECA00E590D5 /* Sentry */ = { isa = XCSwiftPackageProductDependency; - package = 27C667A129523ECA00E590D5 /* XCRemoteSwiftPackageReference "sentry-cocoa.git" */; + package = 27C667A129523ECA00E590D5 /* XCRemoteSwiftPackageReference "sentry-cocoa" */; productName = Sentry; }; 27C667A429523F0A00E590D5 /* Sentry */ = { isa = XCSwiftPackageProductDependency; - package = 27C667A129523ECA00E590D5 /* XCRemoteSwiftPackageReference "sentry-cocoa.git" */; + package = 27C667A129523ECA00E590D5 /* XCRemoteSwiftPackageReference "sentry-cocoa" */; productName = Sentry; }; 49AE370026D4455D00EF4E52 /* Gekidou */ = { @@ -2404,7 +2459,7 @@ }; 7FD4822B2864D73300A5B18B /* OpenGraph */ = { isa = XCSwiftPackageProductDependency; - package = 7FD4822A2864D73300A5B18B /* XCRemoteSwiftPackageReference "OpenGraph.git" */; + package = 7FD4822A2864D73300A5B18B /* XCRemoteSwiftPackageReference "OpenGraph" */; productName = OpenGraph; }; /* End XCSwiftPackageProductDependency section */ diff --git a/ios/Mattermost.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ios/Mattermost.xcworkspace/xcshareddata/swiftpm/Package.resolved index 8d3d7c36f0b..9be5f0f2633 100644 --- a/ios/Mattermost.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ios/Mattermost.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -60,8 +60,8 @@ "repositoryURL": "https://github.com/getsentry/sentry-cocoa.git", "state": { "branch": null, - "revision": "38f4f70d07117b9f958a76b1bff278c2f29ffe0e", - "version": "8.21.0" + "revision": "5575af93efb776414f243e93d6af9f6258dc539a", + "version": "8.36.0" } }, { diff --git a/ios/Mattermost/AppDelegate.h b/ios/Mattermost/AppDelegate.h index 37ec94b47f2..0146c18362a 100644 --- a/ios/Mattermost/AppDelegate.h +++ b/ios/Mattermost/AppDelegate.h @@ -1,9 +1,14 @@ -#import +#import #import #import "RNNotifications.h" +#import +#import "ExpoModulesCore-Swift.h" +#import +#import -@interface AppDelegate : RCTAppDelegate -@property(nonatomic,assign)BOOL allowRotation; +@interface AppDelegate : EXAppDelegateWrapper + +@property (nonatomic) UIInterfaceOrientationMask orientationLock; @end diff --git a/ios/Mattermost/AppDelegate.mm b/ios/Mattermost/AppDelegate.mm index 0315aa57fca..11acd3806de 100644 --- a/ios/Mattermost/AppDelegate.mm +++ b/ios/Mattermost/AppDelegate.mm @@ -7,13 +7,14 @@ #import #import #import -#import #import "Mattermost-Swift.h" #import @implementation AppDelegate +@synthesize orientationLock; + NSString* const NOTIFICATION_MESSAGE_ACTION = @"message"; NSString* const NOTIFICATION_CLEAR_ACTION = @"clear"; NSString* const NOTIFICATION_UPDATE_BADGE_ACTION = @"update_badge"; @@ -27,10 +28,7 @@ -(void)application:(UIApplication *)application handleEventsForBackgroundURLSess - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) - { - _allowRotation = YES; - } + OrientationManager.shared.delegate = self; // Clear keychain on first run in case of reinstallation if (![[NSUserDefaults standardUserDefaults] objectForKey:@"FirstRun"]) { @@ -51,17 +49,15 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( [RNNotifications startMonitorNotifications]; - self.moduleName = @"Mattermost"; - // You can add your custom initial props in the dictionary below. - // They will be passed down to the ViewController used by React Native. - self.initialProps = @{}; - [ReactNativeNavigation bootstrapWithDelegate:self launchOptions:launchOptions]; - os_log(OS_LOG_DEFAULT, "Mattermost started!!"); - + [ReactNativeNavigation bootstrapWithDelegate:self launchOptions:launchOptions]; return YES; } +-(BOOL)bridgelessEnabled { + return NO; +} + - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [RNNotifications didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; @@ -153,11 +149,7 @@ -(void)applicationWillTerminate:(UIApplication *)application { } - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { - if (_allowRotation == YES) { - return UIInterfaceOrientationMaskAllButUpsideDown; - }else{ - return (UIInterfaceOrientationMaskPortrait); - } + return self.orientationLock; } - (NSArray> *)extraModulesForBridge:(RCTBridge *)bridge @@ -170,73 +162,12 @@ - (UIInterfaceOrientationMask)application:(UIApplication *)application supported return extraModules; } -/* - https://mattermost.atlassian.net/browse/MM-10601 - Required by react-native-hw-keyboard-event - (https://github.com/emilioicai/react-native-hw-keyboard-event) -*/ -RNHWKeyboardEvent *hwKeyEvent = nil; -- (NSMutableArray *)keyCommands { - if (hwKeyEvent == nil) { - hwKeyEvent = [[RNHWKeyboardEvent alloc] init]; - } - - NSMutableArray *commands = [NSMutableArray new]; - - if ([hwKeyEvent isListening]) { - UIKeyCommand *enter = [UIKeyCommand keyCommandWithInput:@"\r" modifierFlags:0 action:@selector(sendEnter:)]; - UIKeyCommand *shiftEnter = [UIKeyCommand keyCommandWithInput:@"\r" modifierFlags:UIKeyModifierShift action:@selector(sendShiftEnter:)]; - UIKeyCommand *findChannels = [UIKeyCommand keyCommandWithInput:@"k" modifierFlags:UIKeyModifierCommand action:@selector(sendFindChannels:)]; - if (@available(iOS 13.0, *)) { - [enter setTitle:@"Send message"]; - [enter setDiscoverabilityTitle:@"Send message"]; - [shiftEnter setTitle:@"Add new line"]; - [shiftEnter setDiscoverabilityTitle:@"Add new line"]; - [findChannels setTitle:@"Find channels"]; - [findChannels setDiscoverabilityTitle:@"Find channels"]; - } - if (@available(iOS 15.0, *)) { - [enter setWantsPriorityOverSystemBehavior:YES]; - [shiftEnter setWantsPriorityOverSystemBehavior:YES]; - [findChannels setWantsPriorityOverSystemBehavior:YES]; - } - - [commands addObject: enter]; - [commands addObject: shiftEnter]; - [commands addObject: findChannels]; - } - - return commands; -} - -- (void)sendEnter:(UIKeyCommand *)sender { - NSString *selected = sender.input; - [hwKeyEvent sendHWKeyEvent:@"enter"]; -} -- (void)sendShiftEnter:(UIKeyCommand *)sender { - NSString *selected = sender.input; - [hwKeyEvent sendHWKeyEvent:@"shift-enter"]; -} -- (void)sendFindChannels:(UIKeyCommand *)sender { - NSString *selected = sender.input; - [hwKeyEvent sendHWKeyEvent:@"find-channels"]; -} - -- (NSDictionary *)prepareInitialProps -{ - NSMutableDictionary *initProps = [NSMutableDictionary new]; -#ifdef RCT_NEW_ARCH_ENABLED - initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]); -#endif - return initProps; -} - - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { - return [self getBundleURL]; + return [self bundleURL]; } -- (NSURL *)getBundleURL +- (NSURL *)bundleURL { #if DEBUG return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; @@ -245,4 +176,21 @@ - (NSURL *)getBundleURL #endif } +- (NSMutableArray *)keyCommands { + return [MattermostHardwareKeyboardWrapper registerKeyCommandsWithEnterPressed: + @selector(sendEnter:) shiftEnterPressed:@selector(sendShiftEnter:) findChannels:@selector(sendFindChannels:)]; +} + +- (void)sendEnter:(UIKeyCommand *)sender { + [MattermostHardwareKeyboardWrapper enterKeyPressed]; +} + +- (void)sendShiftEnter:(UIKeyCommand *)sender { + [MattermostHardwareKeyboardWrapper shiftEnterKeyPressed]; +} + +- (void)sendFindChannels:(UIKeyCommand *)sender { + [MattermostHardwareKeyboardWrapper findChannels]; +} + @end diff --git a/ios/Mattermost/RNNotificationEventHandler+HandleReplyAction.h b/ios/Mattermost/Extensions/RNNotificationEventHandler+HandleReplyAction.h similarity index 100% rename from ios/Mattermost/RNNotificationEventHandler+HandleReplyAction.h rename to ios/Mattermost/Extensions/RNNotificationEventHandler+HandleReplyAction.h diff --git a/ios/Mattermost/RNNotificationEventHandler+HandleReplyAction.m b/ios/Mattermost/Extensions/RNNotificationEventHandler+HandleReplyAction.m similarity index 87% rename from ios/Mattermost/RNNotificationEventHandler+HandleReplyAction.m rename to ios/Mattermost/Extensions/RNNotificationEventHandler+HandleReplyAction.m index 811c255459b..cd1a8893f35 100644 --- a/ios/Mattermost/RNNotificationEventHandler+HandleReplyAction.m +++ b/ios/Mattermost/Extensions/RNNotificationEventHandler+HandleReplyAction.m @@ -16,6 +16,9 @@ NSString *const ReplyActionID = @"REPLY_ACTION"; +typedef void (*SendReplyCompletionHandlerIMP)(id, SEL, UNNotificationResponse *, void (^)(void)); +static SendReplyCompletionHandlerIMP originalSendReplyCompletionHandlerImplementation = NULL; + @implementation RNNotificationEventHandler (HandleReplyAction) - (RNNotificationCenter *)notificationCenter{ @@ -37,7 +40,16 @@ + (void)load { Method originalMethod = class_getInstanceMethod(class, originalSelector); Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); - method_exchangeImplementations(originalMethod, swizzledMethod); + // Get the implementation of the swizzled method + IMP swizzledImplementation = method_getImplementation(swizzledMethod); + + // Get the original implementation + IMP originalImplementation = method_getImplementation(originalMethod); + + // Set the original method's implementation to the swizzled method's implementation + method_setImplementation(originalMethod, swizzledImplementation); + + originalSendReplyCompletionHandlerImplementation = (SendReplyCompletionHandlerIMP)originalImplementation; }); } @@ -140,7 +152,7 @@ - (void)handleReplyAction_didReceiveNotificationResponse:(UNNotificationResponse if ([response.actionIdentifier isEqualToString:ReplyActionID]) { [self sendReply:response completionHandler:completionHandler]; } else { - [self handleReplyAction_didReceiveNotificationResponse:response completionHandler:completionHandler]; + originalSendReplyCompletionHandlerImplementation(self, @selector(sendReply:completionHandler:), response, completionHandler); } } diff --git a/ios/Mattermost/SDWebImageDownloaderOperation+Swizzle.h b/ios/Mattermost/Extensions/SDWebImageDownloaderOperation+Swizzle.h similarity index 100% rename from ios/Mattermost/SDWebImageDownloaderOperation+Swizzle.h rename to ios/Mattermost/Extensions/SDWebImageDownloaderOperation+Swizzle.h diff --git a/ios/Mattermost/SDWebImageDownloaderOperation+Swizzle.m b/ios/Mattermost/Extensions/SDWebImageDownloaderOperation+Swizzle.m similarity index 65% rename from ios/Mattermost/SDWebImageDownloaderOperation+Swizzle.m rename to ios/Mattermost/Extensions/SDWebImageDownloaderOperation+Swizzle.m index fdf9238c37e..9ee2251ecd5 100644 --- a/ios/Mattermost/SDWebImageDownloaderOperation+Swizzle.m +++ b/ios/Mattermost/Extensions/SDWebImageDownloaderOperation+Swizzle.m @@ -8,8 +8,14 @@ @import react_native_network_client; #import +typedef id (*InitWithRequestInSessionOptionsContextIMP)(id, SEL, NSURLRequest *, NSURLSession *, SDWebImageDownloaderOptions *, id); +typedef void (*URLSessionTaskDidReceiveChallengeIMP)(id, SEL, NSURLSession *, NSURLSessionTask *, NSURLAuthenticationChallenge *, void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *)); + @implementation SDWebImageDownloaderOperation (Swizzle) +static InitWithRequestInSessionOptionsContextIMP originalInitWithRequestInSessionOptionsContextImplementation = NULL; +static URLSessionTaskDidReceiveChallengeIMP originalURLSessionTaskDidReceiveChallengeImplementation = NULL; + + (void) load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ @@ -27,7 +33,16 @@ + (void) swizzleInitMethod { Method originalMethod = class_getInstanceMethod(class, originalSelector); Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); - method_exchangeImplementations(originalMethod, swizzledMethod); + // Get the implementation of the swizzled method + IMP swizzledImplementation = method_getImplementation(swizzledMethod); + + // Get the original implementation + IMP originalImplementation = method_getImplementation(originalMethod); + + // Set the original method's implementation to the swizzled method's implementation + method_setImplementation(originalMethod, swizzledImplementation); + + originalInitWithRequestInSessionOptionsContextImplementation = (InitWithRequestInSessionOptionsContextIMP)originalImplementation; } @@ -40,7 +55,16 @@ + (void) swizzleURLSessionTaskDelegateMethod { Method originalMethod = class_getInstanceMethod(class, originalSelector); Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); - method_exchangeImplementations(originalMethod, swizzledMethod); + // Get the implementation of the swizzled method + IMP swizzledImplementation = method_getImplementation(swizzledMethod); + + // Get the original implementation + IMP originalImplementation = method_getImplementation(originalMethod); + + // Set the original method's implementation to the swizzled method's implementation + method_setImplementation(originalMethod, swizzledImplementation); + + originalURLSessionTaskDidReceiveChallengeImplementation = (URLSessionTaskDidReceiveChallengeIMP)originalImplementation; } #pragma mark - Method Swizzling @@ -56,14 +80,14 @@ - (nonnull instancetype)swizzled_initWithRequest:(NSURLRequest *)request inSessi // our BearerAuthenticationAdapter. NSURLSessionConfiguration *configuration = [nativeClientSessionManager getSessionConfigurationFor:sessionBaseUrl]; NSURLSession *newSession = [NSURLSession sessionWithConfiguration:configuration - delegate:self + delegate:self delegateQueue:session.delegateQueue]; NSURLRequest *authorizedRequest = [BearerAuthenticationAdapter addAuthorizationBearerTokenTo:request withSessionBaseUrlString:sessionBaseUrl.absoluteString]; - return [self swizzled_initWithRequest:authorizedRequest inSession:newSession options:options context:context]; + return originalInitWithRequestInSessionOptionsContextImplementation(self, @selector(initWithRequest:inSession:options:context:), authorizedRequest, session, &options, context); } - return [self swizzled_initWithRequest:request inSession:session options:options context:context]; + return originalInitWithRequestInSessionOptionsContextImplementation(self, @selector(initWithRequest:inSession:options:context:), request, session, &options, context); } @@ -95,7 +119,7 @@ - (void)swizzled_URLSession:(NSURLSession *)session task:(NSURLSessionTask *)tas return; } - [self swizzled_URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler]; + originalURLSessionTaskDidReceiveChallengeImplementation(self, @selector(URLSession:task:didReceiveChallenge:completionHandler:), session, task, challenge, completionHandler); } @end diff --git a/ios/Mattermost/NotificationHelper.swift b/ios/Mattermost/Helpers/NotificationHelper.swift similarity index 76% rename from ios/Mattermost/NotificationHelper.swift rename to ios/Mattermost/Helpers/NotificationHelper.swift index d8b82c556b2..58ca9f9fb49 100644 --- a/ios/Mattermost/NotificationHelper.swift +++ b/ios/Mattermost/Helpers/NotificationHelper.swift @@ -7,7 +7,7 @@ import UIKit @objc public static let `default` = NotificationHelper() private let notificationCenter = UNUserNotificationCenter.current() - @objc func getDeliveredNotifications(completionHandler: @escaping ([UNNotification]) -> Void) { + func getDeliveredNotifications(completionHandler: @escaping ([UNNotification]) -> Void) { notificationCenter.getDeliveredNotifications(completionHandler: completionHandler) } @@ -33,7 +33,7 @@ import UIKit UIApplication.shared.applicationIconBadgeNumber = mentions } - @objc func removeChannelNotifications(serverUrl: String, channelId: String) { + func removeChannelNotifications(serverUrl: String, channelId: String) { getDeliveredNotifications(completionHandler: {notifications in var notificationIds = [String]() @@ -55,7 +55,7 @@ import UIKit }) } - @objc func removeThreadNotifications(serverUrl: String, threadId: String) { + func removeThreadNotifications(serverUrl: String, threadId: String) { getDeliveredNotifications(completionHandler: {notifications in var notificationIds = [String]() @@ -74,23 +74,4 @@ import UIKit self.notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationIds) }) } - - @objc func removeServerNotifications(serverUrl: String) { - getDeliveredNotifications(completionHandler: {notifications in - var notificationIds = [String]() - - for notification in notifications { - let request = notification.request - let content = request.content - let identifier = request.identifier - let url = content.userInfo["server_url"] as? String - - if url == serverUrl { - notificationIds.append(identifier) - } - } - - self.notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationIds) - }) - } } diff --git a/ios/Mattermost/Info.plist b/ios/Mattermost/Info.plist index 1622785b052..61e148cb191 100644 --- a/ios/Mattermost/Info.plist +++ b/ios/Mattermost/Info.plist @@ -21,7 +21,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.17.0 + 2.22.0 CFBundleSignature ???? CFBundleURLTypes @@ -37,7 +37,7 @@ CFBundleVersion - 522 + 569 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS @@ -65,10 +65,6 @@ Allowing access to your camera enables you to take photos or videos and attach them to messages. NSFaceIDUsageDescription Enabling access to your Face ID means we can restrict unauthorized users from accessing $(PRODUCT_NAME) on your device. - NSLocationAlwaysUsageDescription - Enabling access to your location data means we can add location metadata to pictures and videos you share in $(PRODUCT_NAME). - NSLocationWhenInUseUsageDescription - Enabling access to your location data means we can add location metadata to pictures and videos you share in $(PRODUCT_NAME). NSMicrophoneUsageDescription Enabling access to your device's microphones means you can capture audio for calls or videos to share in $(PRODUCT_NAME). NSPhotoLibraryAddUsageDescription @@ -109,7 +105,7 @@ LaunchScreen UIRequiredDeviceCapabilities - armv7 + arm64 UIRequiresFullScreen diff --git a/ios/Mattermost/Mattermost-Bridging-Header.h b/ios/Mattermost/Mattermost-Bridging-Header.h index 2e4705bc9b9..51013b00ef0 100644 --- a/ios/Mattermost/Mattermost-Bridging-Header.h +++ b/ios/Mattermost/Mattermost-Bridging-Header.h @@ -5,3 +5,4 @@ #import #import #import "AppDelegate.h" +#import diff --git a/ios/Mattermost/MattermostManaged.h b/ios/Mattermost/MattermostManaged.h deleted file mode 100644 index ac4582cdd17..00000000000 --- a/ios/Mattermost/MattermostManaged.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MattermostManaged.h -// Mattermost -// -// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. -// See License.txt for license information. -// - -#import -#import - -@interface MattermostManaged : NSObject -@property (nonatomic) NSUserDefaults *sharedUserDefaults; - -@end diff --git a/ios/Mattermost/MattermostManaged.m b/ios/Mattermost/MattermostManaged.m deleted file mode 100644 index b0d3d8c7b23..00000000000 --- a/ios/Mattermost/MattermostManaged.m +++ /dev/null @@ -1,179 +0,0 @@ -// -// MattermostManaged.m -// Mattermost -// -// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. -// See License.txt for license information. -// - -#import "MattermostManaged.h" -#import "CreateThumbnail.h" -#import "Mattermost-Swift.h" - -@implementation MattermostManaged - -RCT_EXPORT_MODULE(); - -+ (BOOL)requiresMainQueueSetup -{ - return YES; -} - --(NSString *)appGroupId { - NSBundle *bundle = [NSBundle mainBundle]; - NSString *appGroupId = [bundle objectForInfoDictionaryKey:@"AppGroupIdentifier"]; - return appGroupId; -} - - --(NSDictionary * ) appGroupSharedDirectory { - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSURL *sharedDirectory = [fileManager containerURLForSecurityApplicationGroupIdentifier: [self appGroupId]]; - NSURL * databasePath = [sharedDirectory URLByAppendingPathComponent:@"databases"]; - - [fileManager createDirectoryAtPath:[databasePath path] - withIntermediateDirectories:true - attributes:nil - error:nil - ]; - return @{ - @"sharedDirectory": [sharedDirectory path ], - @"databasePath" : [databasePath path] - }; -} - - - -- (NSDictionary *)constantsToExport { - return @{ - @"appGroupIdentifier": [self appGroupId], - @"appGroupSharedDirectory" : [self appGroupSharedDirectory] - }; -} - - -RCT_EXPORT_METHOD(deleteDatabaseDirectory: (NSString *)databaseName shouldRemoveDirectory: (BOOL) shouldRemoveDirectory callback: (RCTResponseSenderBlock)callback){ - @try { - NSDictionary *appGroupDir = [self appGroupSharedDirectory]; - NSString *databaseDir; - - if(databaseName){ - databaseDir = [NSString stringWithFormat:@"%@/%@%@", appGroupDir[@"databasePath"], databaseName , @".db"]; - } - - if(shouldRemoveDirectory){ - databaseDir = appGroupDir[@"databasePath"]; - } - - - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSError *error = nil; - - if (!shouldRemoveDirectory && [fileManager fileExistsAtPath:[NSString stringWithFormat:@"%@-wal", databaseDir]]) { - [fileManager removeItemAtPath:[NSString stringWithFormat:@"%@-wal", databaseDir] error:nil]; - } - - if (!shouldRemoveDirectory && [fileManager fileExistsAtPath:[NSString stringWithFormat:@"%@-shm", databaseDir]]) { - [fileManager removeItemAtPath:[NSString stringWithFormat:@"%@-shm", databaseDir] error:nil]; - } - - BOOL successCode = [fileManager removeItemAtPath:databaseDir error:&error]; - NSNumber *success= [NSNumber numberWithBool:successCode]; - - callback(@[(error ?: [NSNull null]), success]); - } - @catch (NSException *exception) { - NSLog(@"%@", exception.reason); - callback(@[exception.reason, @NO]); - } -} - -RCT_EXPORT_METHOD(renameDatabase: (NSString *)databaseName to: (NSString *) newDBName callback: (RCTResponseSenderBlock)callback){ - @try { - NSDictionary *appGroupDir = [self appGroupSharedDirectory]; - NSString *databaseDir; - NSString *newDBDir; - - if(databaseName){ - databaseDir = [NSString stringWithFormat:@"%@/%@%@", appGroupDir[@"databasePath"], databaseName , @".db"]; - } - - if (newDBName){ - newDBDir = [NSString stringWithFormat:@"%@/%@%@", appGroupDir[@"databasePath"], newDBName , @".db"]; - } - - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSError *error = nil; - - BOOL destinationHasFile = [fileManager fileExistsAtPath:newDBDir]; - - if (!destinationHasFile && [fileManager fileExistsAtPath:[NSString stringWithFormat:@"%@-wal", databaseDir]]) { - [fileManager moveItemAtPath:[NSString stringWithFormat:@"%@-wal", databaseDir] toPath:[NSString stringWithFormat:@"%@-wal", newDBDir] error:nil]; - } - - if (!destinationHasFile && [fileManager fileExistsAtPath:[NSString stringWithFormat:@"%@-shm", databaseDir]]) { - [fileManager moveItemAtPath:[NSString stringWithFormat:@"%@-shm", databaseDir] toPath:[NSString stringWithFormat:@"%@-shm", newDBDir] error:nil]; - } - - BOOL successCode = destinationHasFile; - if (!destinationHasFile && [fileManager fileExistsAtPath:databaseDir]){ - successCode = [fileManager moveItemAtPath:databaseDir toPath: newDBDir error:&error]; - } - NSNumber *success= [NSNumber numberWithBool:successCode]; - - callback(@[(error ?: [NSNull null]), success]); - } - @catch (NSException *exception) { - NSLog(@"%@", exception.reason); - callback(@[exception.reason, @NO]); - } -} - -RCT_EXPORT_METHOD(deleteEntititesFile: (RCTResponseSenderBlock) callback) { - @try { - NSDictionary *appGroupDir = [self appGroupSharedDirectory]; - NSString *entities = [NSString stringWithFormat:@"%@/entities", appGroupDir[@"sharedDirectory"]]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSError *error = nil; - - BOOL successCode = [fileManager removeItemAtPath:entities error:&error]; - NSNumber *success= [NSNumber numberWithBool:successCode]; - callback(@[success]); - } - @catch (NSException *exception) { - callback(@[@NO]); - } -} - -RCT_EXPORT_METHOD(addListener:(NSString *)eventName) { - // Keep: Required for RN built in Event Emitter Calls. -} - -RCT_EXPORT_METHOD(removeListeners:(double)count) { - // Keep: Required for RN built in Event Emitter Calls. -} - -RCT_EXPORT_METHOD(createThumbnail:(NSDictionary *)config findEventsWithResolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) -{ - NSMutableDictionary *newConfig = [config mutableCopy]; - NSMutableDictionary *headers = [config[@"headers"] ?: @{} mutableCopy]; - NSString *url = (NSString *)[config objectForKey:@"url"] ?: @""; - NSURL *vidURL = nil; - NSString *url_ = [url lowercaseString]; - - if ([url_ hasPrefix:@"http://"] || [url_ hasPrefix:@"https://"] || [url_ hasPrefix:@"file://"]) { - vidURL = [NSURL URLWithString:url]; - NSString *serverUrl = [NSString stringWithFormat:@"%@://%@:%@", vidURL.scheme, vidURL.host, vidURL.port]; - if (vidURL != nil) { - NSString *token = [[GekidouWrapper default] getTokenFor:serverUrl]; - if (token != nil) { - - headers[@"Authorization"] = [NSString stringWithFormat:@"Bearer %@", token]; - newConfig[@"headers"] = headers; - } - } - } - [CreateThumbnail create:newConfig findEventsWithResolver:resolve rejecter:reject]; -} - -@end diff --git a/ios/Mattermost/Modules/SplitViewModule.m b/ios/Mattermost/Modules/SplitViewModule.m deleted file mode 100644 index 6c062614b21..00000000000 --- a/ios/Mattermost/Modules/SplitViewModule.m +++ /dev/null @@ -1,11 +0,0 @@ -#import -#import - -@interface RCT_EXTERN_REMAP_MODULE(SplitView, SplitViewModule, RCTEventEmitter) -RCT_EXTERN_METHOD(supportedEvents) -RCT_EXTERN_METHOD(startObserving) -RCT_EXTERN_METHOD(stopObserving) -RCT_EXTERN__BLOCKING_SYNCHRONOUS_METHOD(isRunningInSplitView) -RCT_EXTERN_METHOD(unlockOrientation) -RCT_EXTERN_METHOD(lockPortrait) -@end diff --git a/ios/Mattermost/Modules/SplitViewModule.swift b/ios/Mattermost/Modules/SplitViewModule.swift deleted file mode 100644 index f39a9693ad8..00000000000 --- a/ios/Mattermost/Modules/SplitViewModule.swift +++ /dev/null @@ -1,85 +0,0 @@ -import Foundation - -@objc(SplitViewModule) -class SplitViewModule: RCTEventEmitter { - var hasListeners = false - - @objc - override static func requiresMainQueueSetup() -> Bool { - return true - } - - @objc - override func supportedEvents() -> [String]! { - return ["SplitViewChanged"] - } - - @objc - override func startObserving() { - hasListeners = true - NotificationCenter.default.addObserver(self, - selector: #selector(isSplitView), name: NSNotification.Name.RCTUserInterfaceStyleDidChange, - object: nil) - } - - @objc - override func stopObserving() { - hasListeners = false - NotificationCenter.default.removeObserver(self, - name: NSNotification.Name.RCTUserInterfaceStyleDidChange, - object: nil) - } - - @objc func isRunningInFullScreen() -> Bool { - guard let w = UIApplication.shared.delegate?.window, let window = w else { return false } - let screenSize = window.screen.bounds.size.width - let frameSize = window.frame.size.width - let shouldBeConsideredFullScreen = frameSize >= (screenSize * 0.6) - return shouldBeConsideredFullScreen - } - - @objc func isSplitView() { - if hasListeners && UIDevice.current.userInterfaceIdiom == .pad { - sendEvent(withName: "SplitViewChanged", body: [ - "isSplitView": !isRunningInFullScreen(), - "isTablet": UIDevice.current.userInterfaceIdiom == .pad, - ]) - } - } - - @objc(isRunningInSplitView) - func isRunningInSplitView() -> Dictionary { - let queue = DispatchQueue.main - let group = DispatchGroup() - var shouldBeConsideredFullScreen = true - group.enter() - queue.async(group: group) { [weak self] in - shouldBeConsideredFullScreen = self?.isRunningInFullScreen() ?? true - group.leave() - } - group.wait() - return [ - "isSplitView": !shouldBeConsideredFullScreen, - "isTablet": UIDevice.current.userInterfaceIdiom == .pad, - ] - } - - @objc(unlockOrientation) - func unlockOrientation() { - DispatchQueue.main.async { - let appDelegate = UIApplication.shared.delegate as! AppDelegate - appDelegate.allowRotation = true - UIDevice.current.setValue(UIInterfaceOrientation.unknown.rawValue, forKey: "orientation") - } - } - - @objc(lockPortrait) - func lockPortrait() { - DispatchQueue.main.async { - let appDelegate = UIApplication.shared.delegate as! AppDelegate - appDelegate.allowRotation = false - UIDevice.current.setValue(UIInterfaceOrientation.unknown.rawValue, forKey: "orientation") - UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation") - } - } -} diff --git a/ios/Mattermost/NotificationsModule.h b/ios/Mattermost/NotificationsModule.h deleted file mode 100644 index 6d25b815867..00000000000 --- a/ios/Mattermost/NotificationsModule.h +++ /dev/null @@ -1,6 +0,0 @@ -#import -#import "RCTConvert+RNNotifications.h" - -@interface NotificationsModule : NSObject - -@end diff --git a/ios/Mattermost/NotificationsModule.m b/ios/Mattermost/NotificationsModule.m deleted file mode 100644 index 7e943c0b834..00000000000 --- a/ios/Mattermost/NotificationsModule.m +++ /dev/null @@ -1,32 +0,0 @@ - -#import "Mattermost-Swift.h" -#import "NotificationsModule.h" - -@implementation NotificationsModule - -RCT_EXPORT_MODULE(Notifications) - -RCT_EXPORT_METHOD(getDeliveredNotifications:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { - [[NotificationHelper default] getDeliveredNotificationsWithCompletionHandler:^(NSArray * _Nonnull notifications) { - NSMutableArray *formattedNotifications = [NSMutableArray new]; - - for (UNNotification *notification in notifications) { - [formattedNotifications addObject:[RCTConvert UNNotificationPayload:notification]]; - } - resolve(formattedNotifications); - }]; -} - -RCT_EXPORT_METHOD(removeChannelNotifications:(NSString *) serverUrl channelId:(NSString*) channelId) { - [[NotificationHelper default] removeChannelNotificationsWithServerUrl:serverUrl channelId:channelId]; -} - -RCT_EXPORT_METHOD(removeThreadNotifications:(NSString *) serverUrl threadId:(NSString*) threadId) { - [[NotificationHelper default] removeThreadNotificationsWithServerUrl:serverUrl threadId:threadId]; -} - -RCT_EXPORT_METHOD(removeServerNotifications:(NSString *) serverUrl) { - [[NotificationHelper default] removeServerNotificationsWithServerUrl:serverUrl]; -} - -@end diff --git a/ios/Mattermost/UIImage+vImageScaling.h b/ios/Mattermost/UIImage+vImageScaling.h deleted file mode 100644 index 3f81f51bb9f..00000000000 --- a/ios/Mattermost/UIImage+vImageScaling.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// UIImage+vImageScaling.h -// UIImage+vImageScaling -// -// Created by Matt Donnelly on 03/07/2013. -// Copyright (c) 2013 Matt Donnelly. All rights reserved. -// taken from https://gist.github.com/mattdonnelly/5924492 - -#import - -@interface UIImage (vImageScaling) - -- (UIImage *)vImageScaledImageWithSize:(CGSize)destSize; -- (UIImage *)vImageScaledImageWithSize:(CGSize)destSize contentMode:(UIViewContentMode)contentMode; - -@end diff --git a/ios/Mattermost/UIImage+vImageScaling.m b/ios/Mattermost/UIImage+vImageScaling.m deleted file mode 100644 index e452ef603bb..00000000000 --- a/ios/Mattermost/UIImage+vImageScaling.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// UIImage+vImageScaling.m -// UIImage+vImageScaling -// -// Created by Matt Donnelly on 03/07/2013. -// Copyright (c) 2013 Matt Donnelly. All rights reserved. -// originally taken from https://gist.github.com/mattdonnelly/5924492 - -#import -#import - -@implementation UIImage (vImageScaling) - -- (UIImage *)vImageScaledImageWithSize:(CGSize)destSize { - UIGraphicsBeginImageContext(CGSizeMake(destSize.width, destSize.height)); - [self drawInRect:CGRectMake(0, 0, destSize.width, destSize.height)]; - UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return newImage; -} - -- (UIImage *)vImageScaledImageWithSize:(CGSize)destSize contentMode:(UIViewContentMode)contentMode { - CGImageRef sourceRef = [self CGImage]; - NSUInteger sourceWidth = CGImageGetWidth(sourceRef); - NSUInteger sourceHeight = CGImageGetHeight(sourceRef); - CGFloat horizontalRatio = destSize.width / sourceWidth; - CGFloat verticalRatio = destSize.height / sourceHeight; - CGFloat ratio; - - switch (contentMode) { - case UIViewContentModeScaleAspectFill: - ratio = MAX(horizontalRatio, verticalRatio); - break; - - case UIViewContentModeScaleAspectFit: - ratio = MIN(horizontalRatio, verticalRatio); - break; - - default: - [NSException raise:NSInvalidArgumentException format:@"Unsupported content mode: %d", contentMode]; - } - - CGSize newSize = CGSizeMake(sourceWidth * ratio, sourceHeight * ratio); - - return [self vImageScaledImageWithSize:newSize]; -} - -@end diff --git a/ios/Mattermost/RuntimeUtils.swift b/ios/Mattermost/Utils/RuntimeUtils.swift similarity index 100% rename from ios/Mattermost/RuntimeUtils.swift rename to ios/Mattermost/Utils/RuntimeUtils.swift diff --git a/ios/MattermostShare/Info.plist b/ios/MattermostShare/Info.plist index 2c4c026a4a4..aab8c859ddd 100644 --- a/ios/MattermostShare/Info.plist +++ b/ios/MattermostShare/Info.plist @@ -19,9 +19,9 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 2.17.0 + 2.22.0 CFBundleVersion - 522 + 569 UIAppFonts OpenSans-Bold.ttf diff --git a/ios/NotificationService/Info.plist b/ios/NotificationService/Info.plist index 2982414231b..dc2053e5130 100644 --- a/ios/NotificationService/Info.plist +++ b/ios/NotificationService/Info.plist @@ -19,9 +19,9 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 2.17.0 + 2.22.0 CFBundleVersion - 522 + 569 NSExtension NSExtensionPointIdentifier diff --git a/ios/Podfile b/ios/Podfile index cde4eb71833..481f2340c98 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -7,22 +7,14 @@ def node_require(script) )", __dir__]).strip end +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") + node_require('react-native/scripts/react_native_pods.rb') node_require('react-native-permissions/scripts/setup.rb') platform :ios, min_ios_version_supported prepare_react_native_project! -# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set. -# because `react-native-flipper` depends on (FlipperKit,...) that will be excluded -# -# To fix this you can also exclude `react-native-flipper` using a `react-native.config.js` -# ```js -# module.exports = { -# dependencies: { -# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}), -# ``` -flipper_config = FlipperConfiguration.disabled linkage = ENV['USE_FRAMEWORKS'] if linkage != nil Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green @@ -39,15 +31,11 @@ setup_permissions([ target 'Mattermost' do # Pods for Mattermost + use_expo_modules! config = use_native_modules! use_react_native!( :path => config[:reactNativePath], - # Enables Flipper. - # - # Note that if you have use_frameworks! enabled, Flipper will not work and - # you should disable the next line. - :flipper_configuration => flipper_config, # An absolute path to your application root. :app_path => "#{Pod::Config.instance.installation_root}/.." ) @@ -56,10 +44,6 @@ target 'Mattermost' do pod 'React-jsc', :path => '../node_modules/react-native/ReactCommon/jsc', :modular_headers => true pod 'simdjson', path: '../node_modules/@nozbe/simdjson', :modular_headers => true - # TODO: Remove this once upstream PR https://github.com/daltoniam/Starscream/pull/871 is merged - pod 'Starscream', :git => 'https://github.com/mattermost/Starscream.git', :commit => '7494780a021e44873e6e5fde5026ef96696c1865' - - post_install do |installer| # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 react_native_post_install( @@ -68,14 +52,10 @@ target 'Mattermost' do :mac_catalyst_enabled => false ) - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.4' - end - end - - puts 'Patching Alamofire to include X-Uncompressed-Content-Length to measure download progress' - %x(patch Pods/Alamofire/Source/SessionDelegate.swift < patches/SessionDelegate.patch) - + # installer.pods_project.targets.each do |target| + # target.build_configurations.each do |config| + # config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.4' + # end + # end end end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 5f2a709a5aa..2ea5bec7945 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,30 +1,66 @@ PODS: - Alamofire (5.9.1) - boost (1.83.0) - - BVLinearGradient (2.8.3): - - React-Core - CocoaLumberjack (3.8.5): - CocoaLumberjack/Core (= 3.8.5) - CocoaLumberjack/Core (3.8.5) - DoubleConversion (1.1.6) - - FBLazyVector (0.73.6) - - FBReactNativeSpec (0.73.6): - - RCT-Folly (= 2022.05.16.00) - - RCTRequired (= 0.73.6) - - RCTTypeSafety (= 0.73.6) - - React-Core (= 0.73.6) - - React-jsi (= 0.73.6) - - ReactCommon/turbomodule/core (= 0.73.6) - - fmt (6.2.1) + - EXApplication (5.9.1): + - ExpoModulesCore + - EXConstants (16.0.2): + - ExpoModulesCore + - Expo (51.0.24): + - ExpoModulesCore + - ExpoCrypto (13.0.2): + - ExpoModulesCore + - ExpoDevice (6.0.2): + - ExpoModulesCore + - ExpoFileSystem (17.0.1): + - ExpoModulesCore + - ExpoImage (1.12.13): + - ExpoModulesCore + - SDWebImage (~> 5.19.1) + - SDWebImageSVGCoder (~> 1.7.0) + - SDWebImageWebPCoder (~> 0.14.6) + - ExpoLinearGradient (13.0.2): + - ExpoModulesCore + - ExpoModulesCore (1.12.20): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsinspector + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - ExpoStoreReview (7.0.2): + - ExpoModulesCore + - ExpoVideoThumbnails (8.0.0): + - ExpoModulesCore + - ExpoWebBrowser (13.0.3): + - ExpoModulesCore + - FBLazyVector (0.74.5) + - fmt (9.1.0) - glog (0.3.5) - - hermes-engine (0.73.6): - - hermes-engine/Pre-built (= 0.73.6) - - hermes-engine/Pre-built (0.73.6) + - hermes-engine (0.74.5): + - hermes-engine/Pre-built (= 0.74.5) + - hermes-engine/Pre-built (0.74.5) - HMSegmentedControl (1.5.6) - - jail-monkey (2.8.0): - - React-Core - - JitsiWebRTC (111.0.2) - - libevent (2.1.12) + - JitsiWebRTC (124.0.1) - libwebp (1.3.2): - libwebp/demux (= 1.3.2) - libwebp/mux (= 1.3.2) @@ -37,315 +73,439 @@ PODS: - libwebp/sharpyuv (1.3.2) - libwebp/webp (1.3.2): - libwebp/sharpyuv - - mattermost-react-native-turbo-log (0.3.2): - - CocoaLumberjack (~> 3.8.2) + - mattermost-hardware-keyboard (0.0.0): + - DoubleConversion - glog - - RCT-Folly (= 2022.05.16.00) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - RCT-Folly (2022.05.16.00): - - boost + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - mattermost-keyboard-tracker (0.0.0): - DoubleConversion - - fmt (~> 6.2.1) - glog - - RCT-Folly/Default (= 2022.05.16.00) - - RCT-Folly/Default (2022.05.16.00): + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - mattermost-react-native-turbo-log (0.4.0): + - CocoaLumberjack (~> 3.8.5) + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - mattermost-rnutils (0.0.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RCT-Folly (2024.01.01.00): - boost - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - - RCT-Folly/Fabric (2022.05.16.00): + - RCT-Folly/Default (= 2024.01.01.00) + - RCT-Folly/Default (2024.01.01.00): - boost - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - - RCT-Folly/Futures (2022.05.16.00): + - RCT-Folly/Fabric (2024.01.01.00): - boost - DoubleConversion - - fmt (~> 6.2.1) - - glog - - libevent - - RCTRequired (0.73.6) - - RCTTypeSafety (0.73.6): - - FBLazyVector (= 0.73.6) - - RCTRequired (= 0.73.6) - - React-Core (= 0.73.6) - - React (0.73.6): - - React-Core (= 0.73.6) - - React-Core/DevSupport (= 0.73.6) - - React-Core/RCTWebSocket (= 0.73.6) - - React-RCTActionSheet (= 0.73.6) - - React-RCTAnimation (= 0.73.6) - - React-RCTBlob (= 0.73.6) - - React-RCTImage (= 0.73.6) - - React-RCTLinking (= 0.73.6) - - React-RCTNetwork (= 0.73.6) - - React-RCTSettings (= 0.73.6) - - React-RCTText (= 0.73.6) - - React-RCTVibration (= 0.73.6) - - React-callinvoker (0.73.6) - - React-Codegen (0.73.6): + - fmt (= 9.1.0) + - glog + - RCTDeprecation (0.74.5) + - RCTRequired (0.74.5) + - RCTTypeSafety (0.74.5): + - FBLazyVector (= 0.74.5) + - RCTRequired (= 0.74.5) + - React-Core (= 0.74.5) + - React (0.74.5): + - React-Core (= 0.74.5) + - React-Core/DevSupport (= 0.74.5) + - React-Core/RCTWebSocket (= 0.74.5) + - React-RCTActionSheet (= 0.74.5) + - React-RCTAnimation (= 0.74.5) + - React-RCTBlob (= 0.74.5) + - React-RCTImage (= 0.74.5) + - React-RCTLinking (= 0.74.5) + - React-RCTNetwork (= 0.74.5) + - React-RCTSettings (= 0.74.5) + - React-RCTText (= 0.74.5) + - React-RCTVibration (= 0.74.5) + - React-callinvoker (0.74.5) + - React-Codegen (0.74.5): - DoubleConversion - - FBReactNativeSpec - glog - hermes-engine - RCT-Folly - RCTRequired - RCTTypeSafety - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics - React-jsi - React-jsiexecutor - React-NativeModulesApple - - React-rncore + - React-rendererdebug + - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.73.6): + - React-Core (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default (= 0.73.6) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.74.5) - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/CoreModulesHeaders (0.73.6): + - React-Core/CoreModulesHeaders (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-Core/Default - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/Default (0.73.6): + - React-Core/Default (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/DevSupport (0.73.6): + - React-Core/DevSupport (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default (= 0.73.6) - - React-Core/RCTWebSocket (= 0.73.6) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.74.5) + - React-Core/RCTWebSocket (= 0.74.5) - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor - - React-jsinspector (= 0.73.6) + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTActionSheetHeaders (0.73.6): + - React-Core/RCTActionSheetHeaders (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-Core/Default - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTAnimationHeaders (0.73.6): + - React-Core/RCTAnimationHeaders (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-Core/Default - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTBlobHeaders (0.73.6): + - React-Core/RCTBlobHeaders (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-Core/Default - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTImageHeaders (0.73.6): + - React-Core/RCTImageHeaders (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-Core/Default - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTLinkingHeaders (0.73.6): + - React-Core/RCTLinkingHeaders (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-Core/Default - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTNetworkHeaders (0.73.6): + - React-Core/RCTNetworkHeaders (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-Core/Default - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTSettingsHeaders (0.73.6): + - React-Core/RCTSettingsHeaders (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-Core/Default - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTTextHeaders (0.73.6): + - React-Core/RCTTextHeaders (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-Core/Default - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTVibrationHeaders (0.73.6): + - React-Core/RCTVibrationHeaders (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation - React-Core/Default - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTWebSocket (0.73.6): + - React-Core/RCTWebSocket (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default (= 0.73.6) + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.74.5) - React-cxxreact + - React-featureflags - React-hermes - React-jsi - React-jsiexecutor + - React-jsinspector - React-perflogger - React-runtimescheduler - React-utils - - SocketRocket (= 0.6.1) + - SocketRocket (= 0.7.0) - Yoga - - React-CoreModules (0.73.6): - - RCT-Folly (= 2022.05.16.00) - - RCTTypeSafety (= 0.73.6) + - React-CoreModules (0.74.5): + - DoubleConversion + - fmt (= 9.1.0) + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety (= 0.74.5) - React-Codegen - - React-Core/CoreModulesHeaders (= 0.73.6) - - React-jsi (= 0.73.6) + - React-Core/CoreModulesHeaders (= 0.74.5) + - React-jsi (= 0.74.5) + - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.73.6) + - React-RCTImage (= 0.74.5) - ReactCommon - - SocketRocket (= 0.6.1) - - React-cxxreact (0.73.6): + - SocketRocket (= 0.7.0) + - React-cxxreact (0.74.5): - boost (= 1.83.0) - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.6) - - React-debug (= 0.73.6) - - React-jsi (= 0.73.6) - - React-jsinspector (= 0.73.6) - - React-logger (= 0.73.6) - - React-perflogger (= 0.73.6) - - React-runtimeexecutor (= 0.73.6) - - React-debug (0.73.6) - - React-Fabric (0.73.6): + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.74.5) + - React-debug (= 0.74.5) + - React-jsi (= 0.74.5) + - React-jsinspector + - React-logger (= 0.74.5) + - React-perflogger (= 0.74.5) + - React-runtimeexecutor (= 0.74.5) + - React-debug (0.74.5) + - React-Fabric (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.73.6) - - React-Fabric/attributedstring (= 0.73.6) - - React-Fabric/componentregistry (= 0.73.6) - - React-Fabric/componentregistrynative (= 0.73.6) - - React-Fabric/components (= 0.73.6) - - React-Fabric/core (= 0.73.6) - - React-Fabric/imagemanager (= 0.73.6) - - React-Fabric/leakchecker (= 0.73.6) - - React-Fabric/mounting (= 0.73.6) - - React-Fabric/scheduler (= 0.73.6) - - React-Fabric/telemetry (= 0.73.6) - - React-Fabric/templateprocessor (= 0.73.6) - - React-Fabric/textlayoutmanager (= 0.73.6) - - React-Fabric/uimanager (= 0.73.6) + - React-Fabric/animations (= 0.74.5) + - React-Fabric/attributedstring (= 0.74.5) + - React-Fabric/componentregistry (= 0.74.5) + - React-Fabric/componentregistrynative (= 0.74.5) + - React-Fabric/components (= 0.74.5) + - React-Fabric/core (= 0.74.5) + - React-Fabric/imagemanager (= 0.74.5) + - React-Fabric/leakchecker (= 0.74.5) + - React-Fabric/mounting (= 0.74.5) + - React-Fabric/scheduler (= 0.74.5) + - React-Fabric/telemetry (= 0.74.5) + - React-Fabric/templateprocessor (= 0.74.5) + - React-Fabric/textlayoutmanager (= 0.74.5) + - React-Fabric/uimanager (= 0.74.5) - React-graphics - React-jsi - React-jsiexecutor @@ -354,12 +514,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.73.6): + - React-Fabric/animations (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -373,12 +533,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.73.6): + - React-Fabric/attributedstring (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -392,12 +552,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.73.6): + - React-Fabric/componentregistry (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -411,12 +571,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.73.6): + - React-Fabric/componentregistrynative (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -430,28 +590,28 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.73.6): + - React-Fabric/components (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/components/inputaccessory (= 0.73.6) - - React-Fabric/components/legacyviewmanagerinterop (= 0.73.6) - - React-Fabric/components/modal (= 0.73.6) - - React-Fabric/components/rncore (= 0.73.6) - - React-Fabric/components/root (= 0.73.6) - - React-Fabric/components/safeareaview (= 0.73.6) - - React-Fabric/components/scrollview (= 0.73.6) - - React-Fabric/components/text (= 0.73.6) - - React-Fabric/components/textinput (= 0.73.6) - - React-Fabric/components/unimplementedview (= 0.73.6) - - React-Fabric/components/view (= 0.73.6) + - React-Fabric/components/inputaccessory (= 0.74.5) + - React-Fabric/components/legacyviewmanagerinterop (= 0.74.5) + - React-Fabric/components/modal (= 0.74.5) + - React-Fabric/components/rncore (= 0.74.5) + - React-Fabric/components/root (= 0.74.5) + - React-Fabric/components/safeareaview (= 0.74.5) + - React-Fabric/components/scrollview (= 0.74.5) + - React-Fabric/components/text (= 0.74.5) + - React-Fabric/components/textinput (= 0.74.5) + - React-Fabric/components/unimplementedview (= 0.74.5) + - React-Fabric/components/view (= 0.74.5) - React-graphics - React-jsi - React-jsiexecutor @@ -460,12 +620,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/inputaccessory (0.73.6): + - React-Fabric/components/inputaccessory (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -479,12 +639,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.73.6): + - React-Fabric/components/legacyviewmanagerinterop (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -498,12 +658,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/modal (0.73.6): + - React-Fabric/components/modal (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -517,12 +677,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/rncore (0.73.6): + - React-Fabric/components/rncore (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -536,12 +696,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.73.6): + - React-Fabric/components/root (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -555,12 +715,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/safeareaview (0.73.6): + - React-Fabric/components/safeareaview (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -574,12 +734,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/scrollview (0.73.6): + - React-Fabric/components/scrollview (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -593,12 +753,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/text (0.73.6): + - React-Fabric/components/text (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -612,12 +772,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/textinput (0.73.6): + - React-Fabric/components/textinput (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -631,12 +791,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/unimplementedview (0.73.6): + - React-Fabric/components/unimplementedview (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -650,12 +810,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.73.6): + - React-Fabric/components/view (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -670,12 +830,12 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.73.6): + - React-Fabric/core (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -689,12 +849,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.73.6): + - React-Fabric/imagemanager (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -708,12 +868,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.73.6): + - React-Fabric/leakchecker (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -727,12 +887,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.73.6): + - React-Fabric/mounting (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -746,12 +906,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.73.6): + - React-Fabric/scheduler (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -765,12 +925,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.73.6): + - React-Fabric/telemetry (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -784,12 +944,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.73.6): + - React-Fabric/templateprocessor (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -803,12 +963,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/textlayoutmanager (0.73.6): + - React-Fabric/textlayoutmanager (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -823,12 +983,12 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.73.6): + - React-Fabric/uimanager (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - RCTRequired - RCTTypeSafety - React-Core @@ -842,42 +1002,45 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricImage (0.73.6): + - React-FabricImage (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired (= 0.73.6) - - RCTTypeSafety (= 0.73.6) + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired (= 0.74.5) + - RCTTypeSafety (= 0.74.5) - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.73.6) + - React-jsiexecutor (= 0.74.5) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-graphics (0.73.6): + - React-featureflags (0.74.5) + - React-graphics (0.74.5): + - DoubleConversion + - fmt (= 9.1.0) - glog - - RCT-Folly/Fabric (= 2022.05.16.00) - - React-Core/Default (= 0.73.6) + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-Core/Default (= 0.74.5) - React-utils - - React-hermes (0.73.6): + - React-hermes (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - RCT-Folly/Futures (= 2022.05.16.00) - - React-cxxreact (= 0.73.6) + - RCT-Folly (= 2024.01.01.00) + - React-cxxreact (= 0.74.5) - React-jsi - - React-jsiexecutor (= 0.73.6) - - React-jsinspector (= 0.73.6) - - React-perflogger (= 0.73.6) - - React-ImageManager (0.73.6): + - React-jsiexecutor (= 0.74.5) + - React-jsinspector + - React-perflogger (= 0.74.5) + - React-runtimeexecutor + - React-ImageManager (0.74.5): - glog - RCT-Folly/Fabric - React-Core/Default @@ -886,143 +1049,289 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jsc (0.73.6): - - React-jsc/Fabric (= 0.73.6) - - React-jsi (= 0.73.6) - - React-jsc/Fabric (0.73.6): - - React-jsi (= 0.73.6) - - React-jserrorhandler (0.73.6): - - RCT-Folly/Fabric (= 2022.05.16.00) + - React-jsc (0.74.5): + - React-jsc/Fabric (= 0.74.5) + - React-jsi (= 0.74.5) + - React-jsc/Fabric (0.74.5): + - React-jsi (= 0.74.5) + - React-jserrorhandler (0.74.5): + - RCT-Folly/Fabric (= 2024.01.01.00) - React-debug - React-jsi - React-Mapbuffer - - React-jsi (0.73.6): + - React-jsi (0.74.5): - boost (= 1.83.0) - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-jsiexecutor (0.73.6): + - RCT-Folly (= 2024.01.01.00) + - React-jsiexecutor (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-cxxreact (= 0.73.6) - - React-jsi (= 0.73.6) - - React-perflogger (= 0.73.6) - - React-jsinspector (0.73.6) - - React-logger (0.73.6): + - RCT-Folly (= 2024.01.01.00) + - React-cxxreact (= 0.74.5) + - React-jsi (= 0.74.5) + - React-jsinspector + - React-perflogger (= 0.74.5) + - React-jsinspector (0.74.5): + - DoubleConversion - glog - - React-Mapbuffer (0.73.6): + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-featureflags + - React-jsi + - React-runtimeexecutor (= 0.74.5) + - React-jsitracing (0.74.5): + - React-jsi + - React-logger (0.74.5): + - glog + - React-Mapbuffer (0.74.5): - glog - React-debug - react-native-background-timer (2.4.1): - React-Core - - react-native-cameraroll (7.5.2): + - react-native-cameraroll (7.8.3): + - DoubleConversion - glog - - RCT-Folly (= 2022.05.16.00) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - react-native-cookies (6.2.1): - React-Core - - react-native-create-thumbnail (1.6.4): - - React-Core - - react-native-document-picker (9.1.1): + - react-native-document-picker (9.3.0): - React-Core - - react-native-emm (1.4.1): + - react-native-emm (1.5.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - react-native-hw-keyboard-event (0.0.4): - - React + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - react-native-image-picker (7.1.2): + - DoubleConversion - glog - - RCT-Folly (= 2022.05.16.00) - - React-Core - - react-native-in-app-review (4.3.3): + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - react-native-netinfo (11.3.1): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-netinfo (11.3.2): - React-Core - - react-native-network-client (1.5.1): + - react-native-network-client (1.7.2): - Alamofire (~> 5.9.1) + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - Starscream (~> 4.0.4) + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Starscream (~> 4.0.8) - SwiftyJSON (~> 5.0) + - Yoga - react-native-notifications (5.1.0): - React-Core - - react-native-paste-input (0.7.1): - - React-Core - - Swime (= 3.0.6) - - react-native-safe-area-context (4.9.0): + - react-native-paste-input (0.8.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - react-native-video (5.2.1): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-performance (5.1.2): - React-Core - - react-native-video/Video (= 5.2.1) - - react-native-video/Video (5.2.1): + - react-native-safe-area-context (4.10.8): - React-Core - - react-native-webrtc (111.0.6): - - JitsiWebRTC (~> 111.0.0) + - react-native-video (6.4.3): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - react-native-webview (13.8.4): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-video/Video (= 6.4.3) + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-video/Video (6.4.3): + - DoubleConversion - glog - - RCT-Folly (= 2022.05.16.00) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - React-nativeconfig (0.73.6) - - React-NativeModulesApple (0.73.6): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-webrtc (124.0.3): + - JitsiWebRTC (~> 124.0.0) + - React-Core + - React-nativeconfig (0.74.5) + - React-NativeModulesApple (0.74.5): - glog - hermes-engine - React-callinvoker - React-Core - React-cxxreact - React-jsi + - React-jsinspector - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.73.6) - - React-RCTActionSheet (0.73.6): - - React-Core/RCTActionSheetHeaders (= 0.73.6) - - React-RCTAnimation (0.73.6): - - RCT-Folly (= 2022.05.16.00) + - React-perflogger (0.74.5) + - React-RCTActionSheet (0.74.5): + - React-Core/RCTActionSheetHeaders (= 0.74.5) + - React-RCTAnimation (0.74.5): + - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen - React-Core/RCTAnimationHeaders - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTAppDelegate (0.73.6): - - RCT-Folly + - React-RCTAppDelegate (0.74.5): + - RCT-Folly (= 2024.01.01.00) - RCTRequired - RCTTypeSafety + - React-Codegen - React-Core - React-CoreModules + - React-debug + - React-Fabric + - React-featureflags + - React-graphics - React-hermes - React-nativeconfig - React-NativeModulesApple - React-RCTFabric - React-RCTImage - React-RCTNetwork + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes - React-runtimescheduler + - React-utils - ReactCommon - - React-RCTBlob (0.73.6): + - React-RCTBlob (0.74.5): + - DoubleConversion + - fmt (= 9.1.0) - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly (= 2024.01.01.00) - React-Codegen - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi + - React-jsinspector - React-NativeModulesApple - React-RCTNetwork - ReactCommon - - React-RCTFabric (0.73.6): + - React-RCTFabric (0.74.5): - glog - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) - React-Core - React-debug - React-Fabric - React-FabricImage + - React-featureflags - React-graphics - React-ImageManager - React-jsi + - React-jsinspector - React-nativeconfig - React-RCTImage - React-RCTText @@ -1030,8 +1339,8 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.73.6): - - RCT-Folly (= 2022.05.16.00) + - React-RCTImage (0.74.5): + - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen - React-Core/RCTImageHeaders @@ -1039,200 +1348,334 @@ PODS: - React-NativeModulesApple - React-RCTNetwork - ReactCommon - - React-RCTLinking (0.73.6): + - React-RCTLinking (0.74.5): - React-Codegen - - React-Core/RCTLinkingHeaders (= 0.73.6) - - React-jsi (= 0.73.6) + - React-Core/RCTLinkingHeaders (= 0.74.5) + - React-jsi (= 0.74.5) - React-NativeModulesApple - ReactCommon - - ReactCommon/turbomodule/core (= 0.73.6) - - React-RCTNetwork (0.73.6): - - RCT-Folly (= 2022.05.16.00) + - ReactCommon/turbomodule/core (= 0.74.5) + - React-RCTNetwork (0.74.5): + - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen - React-Core/RCTNetworkHeaders - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTSettings (0.73.6): - - RCT-Folly (= 2022.05.16.00) + - React-RCTSettings (0.74.5): + - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTText (0.73.6): - - React-Core/RCTTextHeaders (= 0.73.6) + - React-RCTText (0.74.5): + - React-Core/RCTTextHeaders (= 0.74.5) - Yoga - - React-RCTVibration (0.73.6): - - RCT-Folly (= 2022.05.16.00) + - React-RCTVibration (0.74.5): + - RCT-Folly (= 2024.01.01.00) - React-Codegen - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCommon - - React-rendererdebug (0.73.6): + - React-rendererdebug (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) - - RCT-Folly (= 2022.05.16.00) + - fmt (= 9.1.0) + - RCT-Folly (= 2024.01.01.00) - React-debug - - React-rncore (0.73.6) - - React-runtimeexecutor (0.73.6): - - React-jsi (= 0.73.6) - - React-runtimescheduler (0.73.6): + - React-rncore (0.74.5) + - React-RuntimeApple (0.74.5): + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-utils + - React-RuntimeCore (0.74.5): - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - React-runtimeexecutor (0.74.5): + - React-jsi (= 0.74.5) + - React-RuntimeHermes (0.74.5): + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsitracing + - React-nativeconfig + - React-RuntimeCore + - React-utils + - React-runtimescheduler (0.74.5): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) - React-callinvoker - React-cxxreact - React-debug + - React-featureflags - React-jsi - React-rendererdebug - React-runtimeexecutor - React-utils - - React-utils (0.73.6): + - React-utils (0.74.5): - glog - - RCT-Folly (= 2022.05.16.00) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) - React-debug - - ReactCommon (0.73.6): - - React-logger (= 0.73.6) - - ReactCommon/turbomodule (= 0.73.6) - - ReactCommon/turbomodule (0.73.6): + - React-jsi (= 0.74.5) + - ReactCommon (0.74.5): + - ReactCommon/turbomodule (= 0.74.5) + - ReactCommon/turbomodule (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.6) - - React-cxxreact (= 0.73.6) - - React-jsi (= 0.73.6) - - React-logger (= 0.73.6) - - React-perflogger (= 0.73.6) - - ReactCommon/turbomodule/bridging (= 0.73.6) - - ReactCommon/turbomodule/core (= 0.73.6) - - ReactCommon/turbomodule/bridging (0.73.6): + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.74.5) + - React-cxxreact (= 0.74.5) + - React-jsi (= 0.74.5) + - React-logger (= 0.74.5) + - React-perflogger (= 0.74.5) + - ReactCommon/turbomodule/bridging (= 0.74.5) + - ReactCommon/turbomodule/core (= 0.74.5) + - ReactCommon/turbomodule/bridging (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.6) - - React-cxxreact (= 0.73.6) - - React-jsi (= 0.73.6) - - React-logger (= 0.73.6) - - React-perflogger (= 0.73.6) - - ReactCommon/turbomodule/core (0.73.6): + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.74.5) + - React-cxxreact (= 0.74.5) + - React-jsi (= 0.74.5) + - React-logger (= 0.74.5) + - React-perflogger (= 0.74.5) + - ReactCommon/turbomodule/core (0.74.5): - DoubleConversion - - fmt (~> 6.2.1) + - fmt (= 9.1.0) - glog - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.6) - - React-cxxreact (= 0.73.6) - - React-jsi (= 0.73.6) - - React-logger (= 0.73.6) - - React-perflogger (= 0.73.6) + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.74.5) + - React-cxxreact (= 0.74.5) + - React-debug (= 0.74.5) + - React-jsi (= 0.74.5) + - React-logger (= 0.74.5) + - React-perflogger (= 0.74.5) + - React-utils (= 0.74.5) - ReactNativeExceptionHandler (2.10.10): - React-Core - ReactNativeIncallManager (4.2.0): - React-Core - - ReactNativeKeyboardTrackingView (5.7.0): - - React - - ReactNativeNavigation (7.39.1): + - ReactNativeNavigation (7.40.1): - HMSegmentedControl - React-Core - React-CoreModules - React-RCTImage - React-RCTText - - ReactNativeNavigation/Core (= 7.39.1) - - ReactNativeNavigation/Core (7.39.1): + - ReactNativeNavigation/Core (= 7.40.1) + - ReactNativeNavigation/Core (7.40.1): - HMSegmentedControl - React-Core - React-CoreModules - React-RCTImage - React-RCTText - - RNCClipboard (1.13.2): - - React-Core - - RNDateTimePicker (7.6.4): + - RNCClipboard (1.14.1): - React-Core - - RNDeviceInfo (10.13.1): + - RNDateTimePicker (8.2.0): - React-Core - - RNFastImage (8.6.3): - - React-Core - - SDWebImage (~> 5.19.0) - - SDWebImageWebPCoder (~> 0.14.5) - RNFileViewer (2.1.5): - React-Core - - RNFS (2.20.0): - - React-Core - - RNGestureHandler (2.16.0): + - RNGestureHandler (2.18.1): + - DoubleConversion - glog - - RCT-Folly (= 2022.05.16.00) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNKeychain (8.2.0): - React-Core - - RNLocalize (3.1.0): + - RNLocalize (3.2.1): - React-Core - RNPermissions (4.1.5): - React-Core - RNReactNativeHapticFeedback (2.2.0): - React-Core - - RNReanimated (3.8.1): + - RNReanimated (3.14.0): + - DoubleConversion - glog - - RCT-Folly (= 2022.05.16.00) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens (3.30.1): + - Yoga + - RNScreens (3.34.0): + - DoubleConversion - glog - - RCT-Folly (= 2022.05.16.00) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - RNSentry (5.20.0): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNSentry (5.33.2): + - DoubleConversion + - glog - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics - React-hermes - - Sentry/HybridSDK (= 8.21.0) - - RNShare (10.1.0): + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Sentry/HybridSDK (= 8.36.0) + - Yoga + - RNShare (10.2.1): - React-Core - - RNSVG (15.1.0): + - RNSVG (15.4.0): - React-Core - - RNVectorIcons (10.0.3): + - RNVectorIcons (10.1.0): + - DoubleConversion - glog - - RCT-Folly (= 2022.05.16.00) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - SDWebImage (5.19.1): - - SDWebImage/Core (= 5.19.1) - - SDWebImage/Core (5.19.1) + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - SDWebImage (5.19.7): + - SDWebImage/Core (= 5.19.7) + - SDWebImage/Core (5.19.7) + - SDWebImageSVGCoder (1.7.0): + - SDWebImage/Core (~> 5.6) - SDWebImageWebPCoder (0.14.6): - libwebp (~> 1.0) - SDWebImage/Core (~> 5.17) - - Sentry/HybridSDK (8.21.0): - - SentryPrivate (= 8.21.0) - - SentryPrivate (8.21.0) + - Sentry/HybridSDK (8.36.0) - simdjson (3.1.0-wmelon1) - - SocketRocket (0.6.1) - - Starscream (4.0.4) + - SocketRocket (0.7.0) + - Starscream (4.0.8) - SwiftyJSON (5.0.2) - - Swime (3.0.6) - WatermelonDB (0.27.1): - React - simdjson - - Yoga (1.14.0) + - Yoga (0.0.0) DEPENDENCIES: - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - - BVLinearGradient (from `../node_modules/react-native-linear-gradient`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - EXApplication (from `../node_modules/expo-application/ios`) + - EXConstants (from `../node_modules/expo-constants/ios`) + - Expo (from `../node_modules/expo`) + - ExpoCrypto (from `../node_modules/expo-crypto/ios`) + - ExpoDevice (from `../node_modules/expo-device/ios`) + - ExpoFileSystem (from `../node_modules/expo-file-system/ios`) + - ExpoImage (from `../node_modules/expo-image/ios`) + - ExpoLinearGradient (from `../node_modules/expo-linear-gradient/ios`) + - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - ExpoStoreReview (from `../node_modules/expo-store-review/ios`) + - ExpoVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`) + - ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) + - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - - jail-monkey (from `../node_modules/jail-monkey`) - - libevent (~> 2.1.12) + - "mattermost-hardware-keyboard (from `../node_modules/@mattermost/hardware-keyboard`)" + - "mattermost-keyboard-tracker (from `../node_modules/@mattermost/keyboard-tracker`)" - "mattermost-react-native-turbo-log (from `../node_modules/@mattermost/react-native-turbo-log`)" + - "mattermost-rnutils (from `../node_modules/@mattermost/rnutils`)" - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) @@ -1244,6 +1687,7 @@ DEPENDENCIES: - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - React-Fabric (from `../node_modules/react-native/ReactCommon`) - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) @@ -1252,25 +1696,23 @@ DEPENDENCIES: - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - react-native-background-timer (from `../node_modules/react-native-background-timer`) - "react-native-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)" - "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)" - - react-native-create-thumbnail (from `../node_modules/react-native-create-thumbnail`) - react-native-document-picker (from `../node_modules/react-native-document-picker`) - "react-native-emm (from `../node_modules/@mattermost/react-native-emm`)" - - react-native-hw-keyboard-event (from `../node_modules/react-native-hw-keyboard-event`) - react-native-image-picker (from `../node_modules/react-native-image-picker`) - - react-native-in-app-review (from `../node_modules/react-native-in-app-review`) - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" - "react-native-network-client (from `../node_modules/@mattermost/react-native-network-client`)" - react-native-notifications (from `../node_modules/react-native-notifications`) - "react-native-paste-input (from `../node_modules/@mattermost/react-native-paste-input`)" + - react-native-performance (from `../node_modules/react-native-performance`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - react-native-video (from `../node_modules/react-native-video`) - react-native-webrtc (from `../node_modules/react-native-webrtc`) - - react-native-webview (from `../node_modules/react-native-webview`) - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) @@ -1287,20 +1729,19 @@ DEPENDENCIES: - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - ReactNativeExceptionHandler (from `../node_modules/react-native-exception-handler`) - ReactNativeIncallManager (from `../node_modules/react-native-incall-manager`) - - ReactNativeKeyboardTrackingView (from `../node_modules/react-native-keyboard-tracking-view`) - ReactNativeNavigation (from `../node_modules/react-native-navigation`) - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)" - "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)" - - RNDeviceInfo (from `../node_modules/react-native-device-info`) - - RNFastImage (from `../node_modules/react-native-fast-image`) - RNFileViewer (from `../node_modules/react-native-file-viewer`) - - RNFS (from `../node_modules/react-native-fs`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNKeychain (from `../node_modules/react-native-keychain`) - RNLocalize (from `../node_modules/react-native-localize`) @@ -1313,7 +1754,6 @@ DEPENDENCIES: - RNSVG (from `../node_modules/react-native-svg`) - RNVectorIcons (from `../node_modules/react-native-vector-icons`) - "simdjson (from `../node_modules/@nozbe/simdjson`)" - - Starscream (from `https://github.com/mattermost/Starscream.git`, commit `7494780a021e44873e6e5fde5026ef96696c1865`) - "WatermelonDB (from `../node_modules/@nozbe/watermelondb`)" - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -1321,43 +1761,69 @@ SPEC REPOS: trunk: - Alamofire - CocoaLumberjack - - fmt - HMSegmentedControl - JitsiWebRTC - - libevent - libwebp - SDWebImage + - SDWebImageSVGCoder - SDWebImageWebPCoder - Sentry - - SentryPrivate - SocketRocket + - Starscream - SwiftyJSON - - Swime EXTERNAL SOURCES: boost: :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" - BVLinearGradient: - :path: "../node_modules/react-native-linear-gradient" DoubleConversion: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + EXApplication: + :path: "../node_modules/expo-application/ios" + EXConstants: + :path: "../node_modules/expo-constants/ios" + Expo: + :path: "../node_modules/expo" + ExpoCrypto: + :path: "../node_modules/expo-crypto/ios" + ExpoDevice: + :path: "../node_modules/expo-device/ios" + ExpoFileSystem: + :path: "../node_modules/expo-file-system/ios" + ExpoImage: + :path: "../node_modules/expo-image/ios" + ExpoLinearGradient: + :path: "../node_modules/expo-linear-gradient/ios" + ExpoModulesCore: + :path: "../node_modules/expo-modules-core" + ExpoStoreReview: + :path: "../node_modules/expo-store-review/ios" + ExpoVideoThumbnails: + :path: "../node_modules/expo-video-thumbnails/ios" + ExpoWebBrowser: + :path: "../node_modules/expo-web-browser/ios" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" - FBReactNativeSpec: - :path: "../node_modules/react-native/React/FBReactNativeSpec" + fmt: + :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2024-02-20-RNv0.73.5-18f99ace4213052c5e7cdbcd39ee9766cd5df7e4 - jail-monkey: - :path: "../node_modules/jail-monkey" + :tag: hermes-2024-06-28-RNv0.74.3-7bda0c267e76d11b68a585f84cfdd65000babf85 + mattermost-hardware-keyboard: + :path: "../node_modules/@mattermost/hardware-keyboard" + mattermost-keyboard-tracker: + :path: "../node_modules/@mattermost/keyboard-tracker" mattermost-react-native-turbo-log: :path: "../node_modules/@mattermost/react-native-turbo-log" + mattermost-rnutils: + :path: "../node_modules/@mattermost/rnutils" RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: - :path: "../node_modules/react-native/Libraries/RCTRequired" + :path: "../node_modules/react-native/Libraries/Required" RCTTypeSafety: :path: "../node_modules/react-native/Libraries/TypeSafety" React: @@ -1378,6 +1844,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon" React-FabricImage: :path: "../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../node_modules/react-native/ReactCommon/react/featureflags" React-graphics: :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" React-hermes: @@ -1394,6 +1862,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" React-logger: :path: "../node_modules/react-native/ReactCommon/logger" React-Mapbuffer: @@ -1404,18 +1874,12 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-camera-roll/camera-roll" react-native-cookies: :path: "../node_modules/@react-native-cookies/cookies" - react-native-create-thumbnail: - :path: "../node_modules/react-native-create-thumbnail" react-native-document-picker: :path: "../node_modules/react-native-document-picker" react-native-emm: :path: "../node_modules/@mattermost/react-native-emm" - react-native-hw-keyboard-event: - :path: "../node_modules/react-native-hw-keyboard-event" react-native-image-picker: :path: "../node_modules/react-native-image-picker" - react-native-in-app-review: - :path: "../node_modules/react-native-in-app-review" react-native-netinfo: :path: "../node_modules/@react-native-community/netinfo" react-native-network-client: @@ -1424,14 +1888,14 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-notifications" react-native-paste-input: :path: "../node_modules/@mattermost/react-native-paste-input" + react-native-performance: + :path: "../node_modules/react-native-performance" react-native-safe-area-context: :path: "../node_modules/react-native-safe-area-context" react-native-video: :path: "../node_modules/react-native-video" react-native-webrtc: :path: "../node_modules/react-native-webrtc" - react-native-webview: - :path: "../node_modules/react-native-webview" React-nativeconfig: :path: "../node_modules/react-native/ReactCommon" React-NativeModulesApple: @@ -1464,8 +1928,14 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" React-rncore: :path: "../node_modules/react-native/ReactCommon" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" React-runtimeexecutor: :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" React-runtimescheduler: :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" React-utils: @@ -1476,22 +1946,14 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-exception-handler" ReactNativeIncallManager: :path: "../node_modules/react-native-incall-manager" - ReactNativeKeyboardTrackingView: - :path: "../node_modules/react-native-keyboard-tracking-view" ReactNativeNavigation: :path: "../node_modules/react-native-navigation" RNCClipboard: :path: "../node_modules/@react-native-clipboard/clipboard" RNDateTimePicker: :path: "../node_modules/@react-native-community/datetimepicker" - RNDeviceInfo: - :path: "../node_modules/react-native-device-info" - RNFastImage: - :path: "../node_modules/react-native-fast-image" RNFileViewer: :path: "../node_modules/react-native-file-viewer" - RNFS: - :path: "../node_modules/react-native-fs" RNGestureHandler: :path: "../node_modules/react-native-gesture-handler" RNKeychain: @@ -1516,128 +1978,129 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-vector-icons" simdjson: :path: "../node_modules/@nozbe/simdjson" - Starscream: - :commit: 7494780a021e44873e6e5fde5026ef96696c1865 - :git: https://github.com/mattermost/Starscream.git WatermelonDB: :path: "../node_modules/@nozbe/watermelondb" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" -CHECKOUT OPTIONS: - Starscream: - :commit: 7494780a021e44873e6e5fde5026ef96696c1865 - :git: https://github.com/mattermost/Starscream.git - SPEC CHECKSUMS: Alamofire: f36a35757af4587d8e4f4bfa223ad10be2422b8c boost: d3f49c53809116a5d38da093a8aa78bf551aed09 - BVLinearGradient: 880f91a7854faff2df62518f0281afb1c60d49a3 CocoaLumberjack: 6a459bc897d6d80bd1b8c78482ec7ad05dffc3f0 - DoubleConversion: fea03f2699887d960129cc54bba7e52542b6f953 - FBLazyVector: f64d1e2ea739b4d8f7e4740cde18089cd97fe864 - FBReactNativeSpec: 9f2b8b243131565335437dba74923a8d3015e780 - fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2 - hermes-engine: 9cecf9953a681df7556b8cc9c74905de8f3293c0 + DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5 + EXApplication: c08200c34daca7af7fd76ac4b9d606077410e8ad + EXConstants: 409690fbfd5afea964e5e9d6c4eb2c2b59222c59 + Expo: 798848eae1daf13363d69790986146b08d0cf92f + ExpoCrypto: 156078f266bf28f80ecf5e2a9c3a0d6ffce07a1c + ExpoDevice: fc94f0e42ecdfd897e7590f2874fc64dfa7e9b1c + ExpoFileSystem: 80bfe850b1f9922c16905822ecbf97acd711dc51 + ExpoImage: 5d64eab48726241df25489503999e0312d602c8e + ExpoLinearGradient: 8cec4a09426d8934c433e83cb36262d72c667fce + ExpoModulesCore: 5440e96a8ee014f4fd88e77264985fd0a65f5f8c + ExpoStoreReview: 15f9a636b62ff00bb21cbe9a9fe22f0239da4481 + ExpoVideoThumbnails: 40c737b2507a7470b14e9452e286513beb9a7d77 + ExpoWebBrowser: 7595ccac6938eb65b076385fd23d035db9ecdc8e + FBLazyVector: ac12dc084d1c8ec4cc4d7b3cf1b0ebda6dab85af + fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120 + glog: fdfdfe5479092de0c4bdbebedd9056951f092c4f + hermes-engine: 8c1577f3fdb849cbe7729c2e7b5abc4b845e88f8 HMSegmentedControl: 34c1f54d822d8308e7b24f5d901ec674dfa31352 - jail-monkey: a71b35d482a70ecba844a90f002994012cf12a5d - JitsiWebRTC: 80f62908fcf2a1160e0d14b584323fb6e6be630b - libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 + JitsiWebRTC: d0ae5fd6a81e771bfd82c2ee6c6bb542ebd65ee8 libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009 - mattermost-react-native-turbo-log: 8e3a92c8e8ad68282977b679586f5708f2aa5f97 - RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0 - RCTRequired: ca1d7414aba0b27efcfa2ccd37637edb1ab77d96 - RCTTypeSafety: 678e344fb976ff98343ca61dc62e151f3a042292 - React: e296bcebb489deaad87326067204eb74145934ab - React-callinvoker: d0b7015973fa6ccb592bb0363f6bc2164238ab8c - React-Codegen: f034a5de6f28e15e8d95d171df17e581d5309268 - React-Core: 44c936d0ab879e9c32e5381bd7596a677c59c974 - React-CoreModules: 558228e12cddb9ca00ff7937894cc5104a21be6b - React-cxxreact: 1fcf565012c203655b3638f35aa03c13c2ed7e9e - React-debug: d444db402065cca460d9c5b072caab802a04f729 - React-Fabric: 7d11905695e42f8bdaedddcf294959b43b290ab8 - React-FabricImage: 6e06a512d2fb5f55669c721578736785d915d4f5 - React-graphics: 5500206f7c9a481456365403c9fcf1638de108b7 - React-hermes: 783023e43af9d6be4fbaeeb96b5beee00649a5f7 - React-ImageManager: df193215ff3cf1a8dad297e554c89c632e42436c - React-jsc: 423fa1db16947e4dffb83c72f6fe4248913b0e00 - React-jserrorhandler: a4d0f541c5852cf031db2f82f51de90be55b1334 - React-jsi: ae102ccb38d2e4d0f512b7074d0c9b4e1851f402 - React-jsiexecutor: bd12ec75873d3ef0a755c11f878f2c420430f5a9 - React-jsinspector: 85583ef014ce53d731a98c66a0e24496f7a83066 - React-logger: 3eb80a977f0d9669468ef641a5e1fabbc50a09ec - React-Mapbuffer: 84ea43c6c6232049135b1550b8c60b2faac19fab + mattermost-hardware-keyboard: b916a168bb3add779bb226b3a62d6ac5ec225a79 + mattermost-keyboard-tracker: b48752a97e731fdae5e8259a4ea0e731e1a05094 + mattermost-react-native-turbo-log: c446c7e8a39c131d6bafa6ae6f830c735030ed5e + mattermost-rnutils: 01504fb26beb75594f4c6e2150668b27783112f5 + RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47 + RCTDeprecation: 3afceddffa65aee666dafd6f0116f1d975db1584 + RCTRequired: ec1239bc9d8bf63e10fb92bd8b26171a9258e0c1 + RCTTypeSafety: f5ecbc86c5c5fa163c05acb7a1c5012e15b5f994 + React: fc9fa7258eff606f44d58c5b233a82dc9cf09018 + React-callinvoker: e3fab14d69607fb7e8e3a57e5a415aed863d3599 + React-Codegen: 6fa87b7c6b8efcd0cef4bfeaec8c8bc8a6abe75a + React-Core: 3a5fd9e781cecf87803e5b091496a606a3df774a + React-CoreModules: cbf4707dafab8f9f826ac0c63a07d0bf5d01e256 + React-cxxreact: 7b188556271e3c7fdf22a04819f6a6225045b9dd + React-debug: d30893c49ae1bce4037ea5cd8bb2511d2a38d057 + React-Fabric: 826729dd2304fda9b89ff0a579f60ba2a470bc26 + React-FabricImage: 2ad1fb8ffa5778eda9ed204a7b3cdd70bc333ce7 + React-featureflags: 4ae83e72d9a92452793601ac9ac7d2280e486089 + React-graphics: 61a026e1c1e7e20d20ac9fec6f6de631732b233d + React-hermes: a7054fbcbda3957e3c5eaad06ef9bf79998d535a + React-ImageManager: 2bbd6eb2e696bc680f76f84563e4b87d241614e1 + React-jsc: 3ec68d4dd44b21345144a18c84204495e6232db5 + React-jserrorhandler: 56fa04d49bfbe54ddfece7916673a73ebfea286b + React-jsi: f3ce1dd2e950b6ad12b65ea3ef89168f1b94c584 + React-jsiexecutor: b4df3a27973d82f9abf3c4bd0f88e042cda25f16 + React-jsinspector: 97ea746c023687de7313ee289817d6991d596c7d + React-jsitracing: 3b6060bbf5317663667e1dd93560c7943ab86ccc + React-logger: 257858bd55f3a4e1bc0cf07ddc8fb9faba6f8c7c + React-Mapbuffer: 6c1cacdbf40b531f549eba249e531a7d0bfd8e7f react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe - react-native-cameraroll: af8eec1e585d053ff485d98ec837f9a8a11b5745 + react-native-cameraroll: 4f313ab09aeaf42ac5f72dec840641da7656f104 react-native-cookies: f54fcded06bb0cda05c11d86788020b43528a26c - react-native-create-thumbnail: e022bcdcba8a0b4529a50d3fa1a832ec921be39d - react-native-document-picker: 3599b238843369026201d2ef466df53f77ae0452 - react-native-emm: f0159c1a24fe08018b3513116f839f9b0e018e75 - react-native-hw-keyboard-event: b517cefb8d5c659a38049c582de85ff43337dc53 - react-native-image-picker: d3db110a3ded6e48c93aef7e8e51afdde8b16ed0 - react-native-in-app-review: db8bb167a5f238e7ceca5c242d6b36ce8c4404a4 - react-native-netinfo: bdb108d340cdb41875c9ced535977cac6d2ff321 - react-native-network-client: a7e0e465f0de5ea75cef5c557df0d9dc0adbf6a9 + react-native-document-picker: 5b97e24a7f1a1e4a50a72c540a043f32d29a70a2 + react-native-emm: ecab44d78fb1cc7d7b7901914f48fb6309c46ff2 + react-native-image-picker: c3afe5472ef870d98a4b28415fc0b928161ee5f7 + react-native-netinfo: 076df4f9b07f6670acf4ce9a75aac8d34c2e2ccc + react-native-network-client: 5173c47230b5f497cdef469cba8e6e1b3df687eb react-native-notifications: 4601a5a8db4ced6ae7cfc43b44d35fe437ac50c4 - react-native-paste-input: d2136a8269eb8ad57d81407ee2b8a646f738a694 - react-native-safe-area-context: b97eb6f9e3b7f437806c2ce5983f479f8eb5de4b - react-native-video: c26780b224543c62d5e1b2a7244a5cd1b50e8253 - react-native-webrtc: 255a1172fd31525b952b36aef7b8e9a41de325e5 - react-native-webview: 9395e82c917d81407deb9b1fe53158dd6c8880ff - React-nativeconfig: b4d4e9901d4cabb57be63053fd2aa6086eb3c85f - React-NativeModulesApple: cd26e56d56350e123da0c1e3e4c76cb58a05e1ee - React-perflogger: 5f49905de275bac07ac7ea7f575a70611fa988f2 - React-RCTActionSheet: 37edf35aeb8e4f30e76c82aab61f12d1b75c04ec - React-RCTAnimation: a69de7f3daa8462743094f4736c455e844ea63f7 - React-RCTAppDelegate: 51fb96b554a6acd0cd7818acecd5aa5ca2f3ab9f - React-RCTBlob: d91771caebf2d015005d750cd1dc2b433ad07c99 - React-RCTFabric: c5b9451d1f2b546119b7a0353226a8a26247d4a9 - React-RCTImage: a0bfe87b6908c7b76bd7d74520f40660bd0ad881 - React-RCTLinking: 5f10be1647952cceddfa1970fdb374087582fc34 - React-RCTNetwork: a0bc3dd45a2dc7c879c80cebb6f9707b2c8bbed6 - React-RCTSettings: 28c202b68afa59afb4067510f2c69c5a530fb9e3 - React-RCTText: 4119d9e53ca5db9502b916e1b146e99798986d21 - React-RCTVibration: 55bd7c48487eb9a2562f2bd3fdc833274f5b0636 - React-rendererdebug: 5fa97ba664806cee4700e95aec42dff1b6f8ea36 - React-rncore: b0a8e1d14dabb7115c7a5b4ec8b9b74d1727d382 - React-runtimeexecutor: bb328dbe2865f3a550df0240df8e2d8c3aaa4c57 - React-runtimescheduler: 9636eee762c699ca7c85751a359101797e4c8b3b - React-utils: d16c1d2251c088ad817996621947d0ac8167b46c - ReactCommon: 2aa35648354bd4c4665b9a5084a7d37097b89c10 + react-native-paste-input: 011a9916ef3acf809a7da122847c61ca0f93a60e + react-native-performance: ff93f8af3b2ee9519fd7879896aa9b8b8272691d + react-native-safe-area-context: b7daa1a8df36095a032dff095a1ea8963cb48371 + react-native-video: b3ba8f424c8c3f54dd9289d47bbe60fbc09bc986 + react-native-webrtc: 41f6602490c618e3ec0e2108e46b84e2c731c127 + React-nativeconfig: ba9a2e54e2f0882cf7882698825052793ed4c851 + React-NativeModulesApple: 8d11ff8955181540585c944cf48e9e7236952697 + React-perflogger: ed4e0c65781521e0424f2e5e40b40cc7879d737e + React-RCTActionSheet: 49d53ff03bb5688ca4606c55859053a0cd129ea5 + React-RCTAnimation: 07b4923885c52c397c4ec103924bf6e53b42c73e + React-RCTAppDelegate: 316e295076734baf9bdf1bfac7d92ab647aed930 + React-RCTBlob: 85c57b0d5e667ff8a472163ba3af0628171a64bb + React-RCTFabric: 97c1465ded4dc92841f5376a39e43e1b2c455f40 + React-RCTImage: b965c85bec820e2a9c154b1fb00a2ecdd59a9c92 + React-RCTLinking: 75f04a5f27c26c4e73a39c50df470820d219df79 + React-RCTNetwork: c1a9143f4d5778efc92da40d83969d03912ccc24 + React-RCTSettings: c6800f91c0ecd48868cd5db754b0b0a7f5ffe039 + React-RCTText: b923e24f9b7250bc4f7ab154c4168ad9f8d8fc9d + React-RCTVibration: 08c4f0c917c435b3619386c25a94ee5d64c250f0 + React-rendererdebug: 3cda04217d9df67b94397ee0ead8ef3d8b7e427b + React-rncore: 4013508a2f3fcf46c961919bbbd4bfdda198977e + React-RuntimeApple: 447844a2bdb0a03ffd24e5b4a4b96cfc50325b88 + React-RuntimeCore: 9b5bffdaccee9b707b1c2694c9044e13ff0bb087 + React-runtimeexecutor: 0e688aefc14c6bc8601f4968d8d01c3fb6446844 + React-RuntimeHermes: 4d6ef6bb0f2b0b40d59143317f6b99c82764c959 + React-runtimescheduler: cfbe85c3510c541ec6dc815c7729b41304b67961 + React-utils: f242eb7e7889419d979ca0e1c02ccc0ea6e43b29 + ReactCommon: f7da14a8827b72704169a48c929bcde802698361 ReactNativeExceptionHandler: b11ff67c78802b2f62eed0e10e75cb1ef7947c60 ReactNativeIncallManager: bfc9c67358cd524882a7c4116dcb311ac2293d4b - ReactNativeKeyboardTrackingView: 02137fac3b2ebd330d74fa54ead48b14750a2306 - ReactNativeNavigation: 86a23855d2ccc74ad3e59bff1595c2d4b76ed8cc - RNCClipboard: 60fed4b71560d7bfe40e9d35dea9762b024da86d - RNDateTimePicker: 08f00a2c341bf96e4b30da15799fbdd4c5fa48a3 - RNDeviceInfo: 4f9c7cfd6b9db1b05eb919620a001cf35b536423 - RNFastImage: 9f74ad6b5cfa9bfc6738ee76cfad9ed79cd8d485 + ReactNativeNavigation: 84cfcceb62947491beda20b96c5999c15ff5b959 + RNCClipboard: 0a720adef5ec193aa0e3de24c3977222c7e52a37 + RNDateTimePicker: 40ffda97d071a98a10fdca4fa97e3977102ccd14 RNFileViewer: ce7ca3ac370e18554d35d6355cffd7c30437c592 - RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 - RNGestureHandler: bc2cdb2dc42facdf34992ae364b8a728e19a3686 + RNGestureHandler: efed690b8493a00b99654043daeb1335276ac4a2 RNKeychain: bfe3d12bf4620fe488771c414530bf16e88f3678 - RNLocalize: e8694475db034bf601e17bd3dfa8986565e769eb + RNLocalize: 4f22418187ecd5ca693231093ff1d912d1b3c9bc RNPermissions: 80011019862146c08f5bad2a86c27e982f483a99 RNReactNativeHapticFeedback: ec56a5f81c3941206fd85625fa669ffc7b4545f9 - RNReanimated: 8a4d86eb951a4a99d8e86266dc71d7735c0c30a9 - RNScreens: b6b64d956af3715adbfe84808694ae82d3fec74f - RNSentry: 5381e9284aec59a546e4a7d40e33ad0839b99c1e - RNShare: b674d9f1cb0dc11116983bebd8712908a226a3ee - RNSVG: 50cf2c7018e57cf5d3522d98d0a3a4dd6bf9d093 - RNVectorIcons: 73ab573085f65a572d3b6233e68996d4707fd505 - SDWebImage: 40b0b4053e36c660a764958bff99eed16610acbb + RNReanimated: f4ff116e33e0afc3d127f70efe928847c7c66355 + RNScreens: aa943ad421c3ced3ef5a47ede02b0cbfc43a012e + RNSentry: 06eb0bb6483b61486c8ee892d4ee78ee3c9110dd + RNShare: 0fad69ae2d71de9d1f7b9a43acf876886a6cb99c + RNSVG: cb24fb322de8c1ebf59904e7aca0447bb8dbed5a + RNVectorIcons: 2a2f79274248390b80684ea3c4400bd374a15c90 + SDWebImage: 8a6b7b160b4d710e2a22b6900e25301075c34cb3 + SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 - Sentry: ebc12276bd17613a114ab359074096b6b3725203 - SentryPrivate: d651efb234cf385ec9a1cdd3eff94b5e78a0e0fe + Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 simdjson: e6bfae9ce4bcdc80452d388d593816f1ca2106f3 - SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 - Starscream: e7497aedb1c2e27d2a672d40286fd1b34f20f2e4 + SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d + Starscream: 19b5533ddb925208db698f0ac508a100b884a1b9 SwiftyJSON: f5b1bf1cd8dd53cd25887ac0eabcfd92301c6a5a - Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b WatermelonDB: 842d22ba555425aa9f3ce551239a001200c539bc - Yoga: 805bf71192903b20fc14babe48080582fee65a80 + Yoga: 950bbfd7e6f04790fdb51149ed51df41f329fcc8 -PODFILE CHECKSUM: 49909842e9eee2254a29db416cc0e5d4efe29446 +PODFILE CHECKSUM: 95e3d9580e262f9a50697ef0d88f61ef54954529 -COCOAPODS: 1.14.3 +COCOAPODS: 1.15.2 diff --git a/ios/PrivacyInfo.xcprivacy b/ios/PrivacyInfo.xcprivacy index 9566011cca9..3fc24727b35 100644 --- a/ios/PrivacyInfo.xcprivacy +++ b/ios/PrivacyInfo.xcprivacy @@ -6,10 +6,10 @@ NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPICategorySystemBootTime NSPrivacyAccessedAPITypeReasons - E174.1 + 35F9.1 @@ -17,15 +17,18 @@ NSPrivacyAccessedAPICategoryFileTimestamp NSPrivacyAccessedAPITypeReasons + C617.1 + 0A2A.1 3B52.1 NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPICategoryDiskSpace NSPrivacyAccessedAPITypeReasons - 35F9.1 + E174.1 + 85F4.1 @@ -33,6 +36,7 @@ NSPrivacyAccessedAPICategoryUserDefaults NSPrivacyAccessedAPITypeReasons + CA92.1 AC6B.1 diff --git a/jest.config.js b/jest.config.js index ac7210c25d6..022dfb171fb 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,7 +2,7 @@ // See LICENSE.txt for license information. module.exports = { - preset: 'react-native', + preset: 'jest-expo', verbose: true, globals: { 'ts-jest': { @@ -15,11 +15,16 @@ module.exports = { collectCoverageFrom: ['app/**/*.{js,jsx,ts,tsx}'], coverageReporters: ['lcov', 'text-summary'], testPathIgnorePatterns: ['/node_modules/'], - transform: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/test/file_transformer.js', - }, + coveragePathIgnorePatterns: ['/node_modules/', '/components/', '/screens/'], transformIgnorePatterns: [ - 'node_modules/(?!(@react-native|react-native)|jail-monkey|@sentry/react-native|react-clone-referenced-element|@react-native-community|react-navigation|@react-navigation/.*|validator|react-syntax-highlighter/.*|hast-util-from-selector|hastscript|property-information|hast-util-parse-selector|space-separated-tokens|comma-separated-tokens|zwitch|@mattermost/calls|@voximplant/react-native-foreground-service)', + 'node_modules/(?!' + + '(@react-native|react-native)|' + + 'expo-*|' + + '@sentry/react-native|' + + 'validator|' + + 'hast-util-from-selector|hastscript|property-information|hast-util-parse-selector|space-separated-tokens|comma-separated-tokens|zwitch|' + + '@mattermost/calls|@voximplant/react-native-foreground-service|' + + '@rneui/base)', ], moduleNameMapper: { diff --git a/libraries/@mattermost/hardware-keyboard/android/build.gradle b/libraries/@mattermost/hardware-keyboard/android/build.gradle new file mode 100644 index 00000000000..572408d1069 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/android/build.gradle @@ -0,0 +1,58 @@ +buildscript { + ext.safeExtGet = {prop, fallback -> + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback + } + repositories { + google() + gradlePluginPortal() + } + def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : "1.9.22" + dependencies { + classpath("com.android.tools.build:gradle:7.3.1") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + } +} + +def isNewArchitectureEnabled() { + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" +} + +apply plugin: 'com.android.library' +apply plugin: 'org.jetbrains.kotlin.android' +if (isNewArchitectureEnabled()) { + apply plugin: 'com.facebook.react' +} + +android { + compileSdkVersion safeExtGet('compileSdkVersion', 34) + namespace "com.mattermost.hardware.keyboard" + + defaultConfig { + minSdkVersion safeExtGet('minSdkVersion', 24) + targetSdkVersion safeExtGet('targetSdkVersion', 34) + buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()) + } + + sourceSets { + main { + if (isNewArchitectureEnabled()) { + java.srcDirs += ['src/newarch'] + } else { + java.srcDirs += ['src/oldarch'] + } + } +} +} + +repositories { + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$projectDir/../node_modules/react-native/android" + } + mavenCentral() + google() +} + +dependencies { + implementation 'com.facebook.react:react-native' +} \ No newline at end of file diff --git a/libraries/@mattermost/hardware-keyboard/android/src/main/AndroidManifest.xml b/libraries/@mattermost/hardware-keyboard/android/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..e765a4a2074 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + diff --git a/libraries/@mattermost/hardware-keyboard/android/src/main/java/com/mattermost/hardware/keyboard/MattermostHardwareKeyboardImpl.kt b/libraries/@mattermost/hardware-keyboard/android/src/main/java/com/mattermost/hardware/keyboard/MattermostHardwareKeyboardImpl.kt new file mode 100644 index 00000000000..82b566aa847 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/android/src/main/java/com/mattermost/hardware/keyboard/MattermostHardwareKeyboardImpl.kt @@ -0,0 +1,46 @@ +package com.mattermost.hardware.keyboard + +import android.view.KeyEvent +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.WritableMap +import com.facebook.react.bridge.WritableNativeMap + +class MattermostHardwareKeyboardImpl(reactApplicationContext: ReactApplicationContext) { + companion object { + const val NAME = "MattermostHardwareKeyboard" + private lateinit var context: ReactApplicationContext + + fun setCtx(ctx: ReactApplicationContext) { + context = ctx + } + + fun dispatchKeyEvent(event: KeyEvent): Boolean { + val keyCode = event.keyCode + val keyAction = event.action + if (keyAction == KeyEvent.ACTION_UP) { + if (keyCode == KeyEvent.KEYCODE_ENTER) { + val keyPressed = if (event.isShiftPressed) "shift-enter" else "enter" + sendEvent(keyPressed) + return true + } else if (keyCode == KeyEvent.KEYCODE_K && event.isCtrlPressed) { + sendEvent("find-channels") + return true + } + } + + return false + } + + private fun sendEvent(action: String) { + if (context.hasActiveReactInstance()) { + val result: WritableMap = WritableNativeMap() + result.putString("action", action) + context.emitDeviceEvent("mmHardwareKeyboardEvent", result) + } + } + } + + init { + setCtx(reactApplicationContext) + } +} diff --git a/libraries/@mattermost/hardware-keyboard/android/src/main/java/com/mattermost/hardware/keyboard/MattermostHardwareKeyboardPackage.kt b/libraries/@mattermost/hardware-keyboard/android/src/main/java/com/mattermost/hardware/keyboard/MattermostHardwareKeyboardPackage.kt new file mode 100644 index 00000000000..d47bfcc0ad9 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/android/src/main/java/com/mattermost/hardware/keyboard/MattermostHardwareKeyboardPackage.kt @@ -0,0 +1,30 @@ +package com.mattermost.hardware.keyboard + +import com.facebook.react.TurboReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.module.model.ReactModuleInfo +import com.facebook.react.module.model.ReactModuleInfoProvider + +class MattermostHardwareKeyboardPackage : TurboReactPackage() { + override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? { + return if (name == MattermostHardwareKeyboardImpl.NAME) { + MattermostHardwareKeyboardModule(reactContext) + } else { + null + } + } + + override fun getReactModuleInfoProvider() = ReactModuleInfoProvider { + mapOf( + MattermostHardwareKeyboardImpl.NAME to ReactModuleInfo( + MattermostHardwareKeyboardImpl.NAME, + MattermostHardwareKeyboardImpl.NAME, + false, // canOverrideExistingModule + false, // needsEagerInit + false, // isCxxModule + BuildConfig.IS_NEW_ARCHITECTURE_ENABLED // isTurboModule + ) + ) + } +} diff --git a/libraries/@mattermost/hardware-keyboard/android/src/newarch/MattermostHardwareKeyboardModule.kt b/libraries/@mattermost/hardware-keyboard/android/src/newarch/MattermostHardwareKeyboardModule.kt new file mode 100644 index 00000000000..f7e13935432 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/android/src/newarch/MattermostHardwareKeyboardModule.kt @@ -0,0 +1,17 @@ +package com.mattermost.hardware.keyboard + +import com.facebook.react.bridge.ReactApplicationContext + +class MattermostHardwareKeyboardModule(context: ReactApplicationContext) : NativeMattermostHardwareKeyboardSpec(context) { + private val impl = MattermostHardwareKeyboardImpl(context) + + override fun getName(): String = MattermostHardwareKeyboardImpl.NAME + + override fun addListener(eventType: String?) { + // Keep: Required for RN built in Event Emitter Calls + } + + override fun removeListeners(count: Double) { + // Keep: Required for RN built in Event Emitter Calls + } +} diff --git a/libraries/@mattermost/hardware-keyboard/android/src/oldarch/MattermostHardwareKeyboardModule.kt b/libraries/@mattermost/hardware-keyboard/android/src/oldarch/MattermostHardwareKeyboardModule.kt new file mode 100644 index 00000000000..de4a1b2d1ac --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/android/src/oldarch/MattermostHardwareKeyboardModule.kt @@ -0,0 +1,21 @@ +package com.mattermost.hardware.keyboard + +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod + +class MattermostHardwareKeyboardModule(context: ReactApplicationContext) : ReactContextBaseJavaModule(context) { + private val impl = MattermostHardwareKeyboardImpl(context) + + override fun getName() = MattermostHardwareKeyboardImpl.NAME + + @ReactMethod + fun addListener(eventName: String) { + // Keep: Required for RN built in Event Emitter Calls + } + + @ReactMethod + fun removeListeners(count: Int) { + // Keep: Required for RN built in Event Emitter Calls + } +} diff --git a/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboard.h b/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboard.h new file mode 100644 index 00000000000..a06d329df9c --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboard.h @@ -0,0 +1,14 @@ + +#import + +#ifdef RCT_NEW_ARCH_ENABLED +#import "MattermostHardwareKeyboardSpec.h" + +@interface MattermostHardwareKeyboard : RCTEventEmitter +#else +#import + +@interface MattermostHardwareKeyboard : RCTEventEmitter +#endif + +@end diff --git a/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboard.mm b/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboard.mm new file mode 100644 index 00000000000..03998841c25 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboard.mm @@ -0,0 +1,60 @@ +#import "MattermostHardwareKeyboard.h" + +#if __has_include("mattermost_hardware_keyboard-Swift.h") +#import "mattermost_hardware_keyboard-Swift.h" +#else +#import +#endif + +@interface MattermostHardwareKeyboard () +@end + +@implementation MattermostHardwareKeyboard { + MattermostHardwareKeyboardWrapper *wrapper; + bool hasListeners; +} + +-(instancetype) init { + self = [super init]; + if (self) { + MattermostHardwareKeyboardWrapper.delegate = self; + } + + return self; +} + +-(void)startObserving { + hasListeners = YES; +} + +// Will be called when this module's last listener is removed, or on dealloc. +-(void)stopObserving { + hasListeners = NO; +} + +RCT_EXPORT_MODULE(MattermostHardwareKeyboard) + +// Don't compile this code when we build for the old architecture. +#ifdef RCT_NEW_ARCH_ENABLED +- (std::shared_ptr)getTurboModule: + (const facebook::react::ObjCTurboModule::InitParams &)params +{ + return std::make_shared(params); +} +#endif + +- (void)sendEventWithName:(NSString * _Nonnull)name result:(NSDictionary * _Nonnull)result { + if (hasListeners) { + [self sendEventWithName:name body:result]; + } +} + +-(NSArray*)supportedEvents { + return [MattermostHardwareKeyboardWrapper supportedEvents]; +} + +-(BOOL)requiresMainQueueSetup { + return NO; +} + +@end diff --git a/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboardEvents.swift b/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboardEvents.swift new file mode 100644 index 00000000000..e89fa325602 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboardEvents.swift @@ -0,0 +1,15 @@ +import Foundation + +@objc public protocol MattermostHardwareKeyboardDelegate { + func sendEvent(name: String, result: Dictionary) +} + +extension MattermostHardwareKeyboardWrapper { + enum Event: String, CaseIterable { + case mmHardwareKeyboardEvent + } + + @objc public static var supportedEvents: [String] { + return Event.allCases.map(\.rawValue) + } +} diff --git a/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboardWrapper.swift b/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboardWrapper.swift new file mode 100644 index 00000000000..69f91673b82 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/ios/MattermostHardwareKeyboardWrapper.swift @@ -0,0 +1,52 @@ +import Foundation + +@objc public class MattermostHardwareKeyboardWrapper: NSObject { + @objc public static weak var delegate: MattermostHardwareKeyboardDelegate? = nil + + private override init() {} + + @objc public static func enterKeyPressed() { + delegate?.sendEvent(name: Event.mmHardwareKeyboardEvent.rawValue, result: [ + "action": "enter" + ]) + } + + @objc public static func shiftEnterKeyPressed() { + delegate?.sendEvent(name: Event.mmHardwareKeyboardEvent.rawValue, result: [ + "action": "shift-enter" + ]) + } + + @objc public static func findChannels() { + delegate?.sendEvent(name: Event.mmHardwareKeyboardEvent.rawValue, result: [ + "action": "find-channels" + ]) + } + + @objc public static func registerKeyCommands(enterPressed: Selector, shiftEnterPressed: Selector, findChannels: Selector) -> NSMutableArray { + let commands = NSMutableArray() + let enter = UIKeyCommand(input: "\r", modifierFlags: [], action: enterPressed) + let shiftEnter = UIKeyCommand(input: "\r", modifierFlags: .shift, action: shiftEnterPressed) + let findChannels = UIKeyCommand(input: "k", modifierFlags: .command, action: findChannels) + + if #available(iOS 13.0, *) { + enter.title = "Send message" + enter.discoverabilityTitle = "Send message" + shiftEnter.title = "Add new line" + shiftEnter.discoverabilityTitle = "Add new line" + findChannels.title = "Find channels" + findChannels.discoverabilityTitle = "Find channels" + } + if #available(iOS 15.0, *) { + enter.wantsPriorityOverSystemBehavior = true + shiftEnter.wantsPriorityOverSystemBehavior = true + findChannels.wantsPriorityOverSystemBehavior = true + } + + commands.add(enter) + commands.add(shiftEnter) + commands.add(findChannels) + + return commands + } +} diff --git a/libraries/@mattermost/hardware-keyboard/mattermost-hardware-keyboard.podspec b/libraries/@mattermost/hardware-keyboard/mattermost-hardware-keyboard.podspec new file mode 100644 index 00000000000..a9dd3251728 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/mattermost-hardware-keyboard.podspec @@ -0,0 +1,39 @@ +require "json" + +package = JSON.parse(File.read(File.join(__dir__, "package.json"))) + +Pod::Spec.new do |s| + s.name = "mattermost-hardware-keyboard" + s.version = package["version"] + s.summary = package["description"] + s.homepage = package["homepage"] + s.license = package["license"] + s.authors = package["author"] + + s.platforms = { :ios => min_ios_version_supported } + s.source = { :git => ".git", :tag => "#{s.version}" } + + s.source_files = "ios/**/*.{h,m,mm,swift}" + + fabric_enabled = ENV["RCT_NEW_ARCH_ENABLED"] == "1" + other_cpp_flags = fabric_enabled ? "-DRCT_NEW_ARCH_ENABLED=1" : "" + + install_modules_dependencies(s) + + s.pod_target_xcconfig = { + 'USE_HEADERMAP' => 'YES', + "DEFINES_MODULE" => "YES", + 'SWIFT_COMPILATION_MODE' => 'wholemodule', + "BUILD_LIBRARY_FOR_DISTRIBUTION" => "YES", + "OTHER_CPLUSPLUSFLAGS" => other_cpp_flags, + "OTHER_SWIFT_FLAGS" => "-no-verify-emitted-module-interface", + "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", + } + + user_header_search_paths = [ + '"${PODS_CONFIGURATION_BUILD_DIR}/mattermost-hardware-keyboard/Swift Compatibility Header"', + ] + s.user_target_xcconfig = { + "HEADER_SEARCH_PATHS" => user_header_search_paths, + } +end diff --git a/libraries/@mattermost/hardware-keyboard/package.json b/libraries/@mattermost/hardware-keyboard/package.json new file mode 100644 index 00000000000..18cd9a3aeb3 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/package.json @@ -0,0 +1,18 @@ +{ + "name": "mattermost-hardware-keyboard", + "version": "0.0.0", + "description": "Hardware keyboard event capture replacing the project from react-native-hw-keyboard-event", + "main": "src/index", + "codegenConfig": { + "name": "MattermostHardwareKeyboardSpec", + "type": "modules", + "jsSrcsDir": "src", + "android": { + "javaPackageName": "com.mattermost.hardwarekeyboard" + } + }, + "author": "Mattermost, Inc.", + "license": "Apache 2.0", + "private": true, + "homepage": "#readme" +} diff --git a/libraries/@mattermost/hardware-keyboard/src/NativeMattermostHardwareKeyboard.ts b/libraries/@mattermost/hardware-keyboard/src/NativeMattermostHardwareKeyboard.ts new file mode 100644 index 00000000000..80abe8c3bfa --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/src/NativeMattermostHardwareKeyboard.ts @@ -0,0 +1,10 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. +import {type TurboModule, TurboModuleRegistry} from 'react-native'; + +export interface Spec extends TurboModule { + addListener: (eventType: string) => void; + removeListeners: (count: number) => void; +} + +export default TurboModuleRegistry.getEnforcing('MattermostHardwareKeyboard'); diff --git a/libraries/@mattermost/hardware-keyboard/src/index.tsx b/libraries/@mattermost/hardware-keyboard/src/index.tsx new file mode 100644 index 00000000000..b8747c4c687 --- /dev/null +++ b/libraries/@mattermost/hardware-keyboard/src/index.tsx @@ -0,0 +1,59 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {useCallback, useEffect} from 'react'; +import {NativeEventEmitter, NativeModules, Platform} from 'react-native'; + +const LINKING_ERROR = + 'The package \'mattermost-hardware-keyboard\' doesn\'t seem to be linked. Make sure: \n\n' + + Platform.select({ios: "- You have run 'pod install'\n", default: ''}) + + '- You rebuilt the app after installing the package\n' + + '- You are not using Expo Go\n'; + +// @ts-expect-error global +const isTurboModuleEnabled = global.__turboModuleProxy != null; + +const MattermostHardwareKeyboardModule = isTurboModuleEnabled ? require('./NativeMattermostHardwareKeyboard').default : NativeModules.MattermostHardwareKeyboard; + +const MattermostHardwareKeyboard = MattermostHardwareKeyboardModule || new Proxy( + {}, + { + get() { + throw new Error(LINKING_ERROR); + }, + }, +); + +const emitter = new NativeEventEmitter(MattermostHardwareKeyboard); + +type Event = { + action: string; +} + +type Events = { + onEnterPressed?: () => void; + onShiftEnterPressed?: () => void; + onFindChannels?: () => void; +} + +export function useHardwareKeyboardEvents(events: Events) { + const handleEvent = useCallback((e: Event) => { + switch (e.action) { + case 'enter': + events.onEnterPressed?.(); + break; + case 'shift-enter': + events.onShiftEnterPressed?.(); + break; + case 'find-channels': + events.onFindChannels?.(); + break; + } + }, [events]); + + useEffect(() => { + const listener = emitter.addListener('mmHardwareKeyboardEvent', handleEvent); + + return () => listener.remove(); + }, [handleEvent]); +} diff --git a/libraries/@mattermost/keyboard-tracker/ios/Extensions/UIResponder+FirstResponder.h b/libraries/@mattermost/keyboard-tracker/ios/Extensions/UIResponder+FirstResponder.h new file mode 100644 index 00000000000..0e8d253e820 --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/ios/Extensions/UIResponder+FirstResponder.h @@ -0,0 +1,6 @@ +#import +#import + +@interface UIResponder (CurrentResponder) ++(id)currentFirstResponder; +@end diff --git a/libraries/@mattermost/keyboard-tracker/ios/Extensions/UIResponder+FirstResponder.m b/libraries/@mattermost/keyboard-tracker/ios/Extensions/UIResponder+FirstResponder.m new file mode 100644 index 00000000000..2da036d29e0 --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/ios/Extensions/UIResponder+FirstResponder.m @@ -0,0 +1,17 @@ +#import "UIResponder+FirstResponder.h" + +static __weak id currentFirstResponder; + +@implementation UIResponder (FirstResponder) + ++(id)currentFirstResponder { + currentFirstResponder = nil; + [[UIApplication sharedApplication] sendAction:@selector(findFirstResponder:) to:nil from:nil forEvent:nil]; + return currentFirstResponder; +} + +-(void)findFirstResponder:(id)sender { + currentFirstResponder = self; +} + +@end diff --git a/libraries/@mattermost/keyboard-tracker/ios/MattermostKeyboardTrackerView.h b/libraries/@mattermost/keyboard-tracker/ios/MattermostKeyboardTrackerView.h new file mode 100644 index 00000000000..65ebeb4fb1c --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/ios/MattermostKeyboardTrackerView.h @@ -0,0 +1,17 @@ +// This guard prevent this file to be compiled in the old architecture. +#ifdef RCT_NEW_ARCH_ENABLED +#import +#import + +#ifndef MattermostKeyboardTrackerViewNativeComponent_h +#define MattermostKeyboardTrackerViewNativeComponent_h + +NS_ASSUME_NONNULL_BEGIN + +@interface MattermostKeyboardTrackerView : RCTViewComponentView +@end + +NS_ASSUME_NONNULL_END + +#endif /* MattermostKeyboardTrackerViewNativeComponent_h */ +#endif /* RCT_NEW_ARCH_ENABLED */ diff --git a/libraries/@mattermost/keyboard-tracker/ios/MattermostKeyboardTrackerView.mm b/libraries/@mattermost/keyboard-tracker/ios/MattermostKeyboardTrackerView.mm new file mode 100644 index 00000000000..f68571bc9d0 --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/ios/MattermostKeyboardTrackerView.mm @@ -0,0 +1,169 @@ +#ifdef RCT_NEW_ARCH_ENABLED +#import "MattermostKeyboardTrackerView.h" +#import "KeyboardTrackingView.h" + +#import +#import +#import +#import + +#import "RCTFabricComponentsPlugins.h" +#import "RCTConversions.h" + +using namespace facebook::react; + +@interface MattermostKeyboardTrackerView () + +@end + +@implementation MattermostKeyboardTrackerView { + KeyboardTrackingView * _view; +} + ++ (ComponentDescriptorProvider)componentDescriptorProvider +{ + return concreteComponentDescriptorProvider(); +} + +-(std::shared_ptr)getEventEmitter { + if (!self->_eventEmitter) { + return nullptr; + } + + assert(std::dynamic_pointer_cast(self->_eventEmitter)); + return std::dynamic_pointer_cast(self->_eventEmitter); +} + +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + static const auto defaultProps = std::make_shared(); + _props = defaultProps; + + _view = [[KeyboardTrackingView alloc] init]; + [self _setOnKeyboardWillShow]; + + self.contentView = _view; + } + + return self; +} + +- (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps +{ + const auto &oldViewProps = *std::static_pointer_cast(_props); + const auto &newViewProps = *std::static_pointer_cast(props); + + if (oldViewProps.scrollBehavior != newViewProps.scrollBehavior) { + std::string behaviorString = toString(newViewProps.scrollBehavior); + KeyboardTrackingScrollBehavior scrollBehavior = KeyboardTrackingScrollBehaviorFromString([NSString stringWithUTF8String:behaviorString.c_str()]); + _view.scrollBehavior = scrollBehavior; + } + + if (oldViewProps.revealKeyboardInteractive != newViewProps.revealKeyboardInteractive) { + _view.revealKeyboardInteractive = newViewProps.revealKeyboardInteractive; + } + + if (oldViewProps.manageScrollView != newViewProps.manageScrollView) { + _view.manageScrollView = newViewProps.manageScrollView; + } + + if (oldViewProps.requiresSameParentToManageScrollView != newViewProps.requiresSameParentToManageScrollView) { + _view.requiresSameParentToManageScrollView = newViewProps.requiresSameParentToManageScrollView; + } + + if (oldViewProps.addBottomView != newViewProps.addBottomView) { + _view.addBottomView = newViewProps.addBottomView; + } + + if (oldViewProps.scrollToFocusedInput != newViewProps.scrollToFocusedInput) { + _view.scrollToFocusedInput = newViewProps.scrollToFocusedInput; + } + + if (oldViewProps.allowHitsOutsideBounds != newViewProps.allowHitsOutsideBounds) { + _view.allowHitsOutsideBounds = newViewProps.allowHitsOutsideBounds; + } + + if (oldViewProps.normalList != newViewProps.normalList) { + _view.normalList = newViewProps.normalList; + } + + if (oldViewProps.viewInitialOffsetY != newViewProps.viewInitialOffsetY) { + _view.viewInitialOffsetY = newViewProps.viewInitialOffsetY; + } + + if (oldViewProps.scrollViewNativeID != newViewProps.scrollViewNativeID) { + _view.scrollViewNativeID = RCTNSStringFromString(newViewProps.scrollViewNativeID); + } + + if (oldViewProps.accessoriesContainerID != newViewProps.accessoriesContainerID) { + _view.accessoriesContainerID = RCTNSStringFromString(newViewProps.accessoriesContainerID); + + } + + if (oldViewProps.backgroundColor != newViewProps.backgroundColor) { + [_view setBottomViewBackgroundColor:RCTUIColorFromSharedColor(newViewProps.backgroundColor)]; + } + + [super updateProps:props oldProps:oldProps]; +} + +- (void)handleCommand:(nonnull const NSString *)commandName args:(nonnull const NSArray *)args { + RCTMattermostKeyboardTrackerViewHandleCommand(self, commandName, args); +} + +-(void)_setOnKeyboardWillShow{ + _view.onKeyboardWillShow = ^(NSDictionary *body) { + const auto eventEmitter = [self getEventEmitter]; + if (eventEmitter) { + eventEmitter->onKeyboardWillShow(MattermostKeyboardTrackerViewEventEmitter::OnKeyboardWillShow{ + .trackingViewHeight = [body[@"trackingViewHeight"] doubleValue], + .keyboardHeight = [body[@"keyboardHeight"] doubleValue], + .contentTopInset = [body[@"contentTopInset"] doubleValue], + .animationDuration = [body[@"animationDuration"] doubleValue], + .keyboardFrameEndHeight = (CGFloat)[body[@"keyboardFrameEndHeight"] doubleValue], + }); + } + }; +} + +Class MattermostKeyboardTrackerViewCls(void) +{ + return MattermostKeyboardTrackerView.class; +} + +- (void)pauseTracking:(nonnull NSString *)scrollViewNativeID { + [_view pauseTracking:scrollViewNativeID]; +} + +- (void)resetScrollView:(nonnull NSString *)scrollViewNativeID { + [_view resetScrollView:scrollViewNativeID]; +} + +- (void)resumeTracking:(nonnull NSString *)scrollViewNativeID { + [_view resumeTracking:scrollViewNativeID]; +} + +- (void)scrollToStart { + [_view scrollToStart]; +} + + +#pragma utils + +KeyboardTrackingScrollBehavior KeyboardTrackingScrollBehaviorFromString(NSString *string) { + if ([string isEqualToString:@"KeyboardTrackingScrollBehaviorNone"]) { + return KeyboardTrackingScrollBehaviorNone; + } else if ([string isEqualToString:@"KeyboardTrackingScrollBehaviorScrollToBottomInvertedOnly"]) { + return KeyboardTrackingScrollBehaviorScrollToBottomInvertedOnly; + } else if ([string isEqualToString:@"KeyboardTrackingScrollBehaviorFixedOffset"]) { + return KeyboardTrackingScrollBehaviorFixedOffset; + } else { + // Handle the case where the string doesn't match any known value + // You can choose to return a default value or raise an exception + return KeyboardTrackingScrollBehaviorNone; // Default value + } +} + +@end +#endif diff --git a/libraries/@mattermost/keyboard-tracker/ios/ViewManagers/MattermostKeyboardTrackerViewManager.mm b/libraries/@mattermost/keyboard-tracker/ios/ViewManagers/MattermostKeyboardTrackerViewManager.mm new file mode 100644 index 00000000000..bd2fc1954b9 --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/ios/ViewManagers/MattermostKeyboardTrackerViewManager.mm @@ -0,0 +1,127 @@ +#import +#import +#import "RCTBridge.h" +#import "KeyboardTrackingView.h" + +@interface MattermostKeyboardTrackerViewManager : RCTViewManager +@property (nonatomic, nullable, strong) RCTDirectEventBlock keyboardWillShow; +@end + +@implementation RCTConvert (KeyboardTrackingScrollBehavior) +RCT_ENUM_CONVERTER(KeyboardTrackingScrollBehavior, (@{ @"KeyboardTrackingScrollBehaviorNone": @(KeyboardTrackingScrollBehaviorNone), + @"KeyboardTrackingScrollBehaviorScrollToBottomInvertedOnly": @(KeyboardTrackingScrollBehaviorScrollToBottomInvertedOnly), + @"KeyboardTrackingScrollBehaviorFixedOffset": @(KeyboardTrackingScrollBehaviorFixedOffset)}), + KeyboardTrackingScrollBehaviorNone, unsignedIntegerValue) +@end + +@implementation MattermostKeyboardTrackerViewManager + +RCT_EXPORT_MODULE(MattermostKeyboardTrackerView) + +#ifndef RCT_NEW_ARCH_ENABLED +- (UIView *)view +{ + return [[KeyboardTrackingView alloc] init]; +} +#endif + +RCT_CUSTOM_VIEW_PROPERTY(scrollBehavior, NSString, KeyboardTrackingView) { + KeyboardTrackingScrollBehavior behavior = [RCTConvert KeyboardTrackingScrollBehavior:json]; + [view setScrollBehavior:behavior]; +} + +RCT_CUSTOM_VIEW_PROPERTY(revealKeyboardInteractive, BOOL, KeyboardTrackingView) { + [view setRevealKeyboardInteractive:json]; +} + +RCT_CUSTOM_VIEW_PROPERTY(manageScrollView, BOOL, KeyboardTrackingView) { + [view setManageScrollView:json]; +} + +RCT_CUSTOM_VIEW_PROPERTY(requiresSameParentToManageScrollView, BOOL, KeyboardTrackingView) { + [view setRequiresSameParentToManageScrollView:json]; +} + +RCT_CUSTOM_VIEW_PROPERTY(addBottomView, BOOL, KeyboardTrackingView) { + [view setAddBottomView:json]; +} + +RCT_CUSTOM_VIEW_PROPERTY(scrollToFocusedInput, BOOL, KeyboardTrackingView) { + [view setScrollToFocusedInput:json]; +} + +RCT_CUSTOM_VIEW_PROPERTY(allowHitsOutsideBounds, BOOL, KeyboardTrackingView) { + [view setAllowHitsOutsideBounds:json]; +} + +RCT_CUSTOM_VIEW_PROPERTY(normalList, BOOL, KeyboardTrackingView) { + [view setNormalList:json]; +} + +RCT_CUSTOM_VIEW_PROPERTY(viewInitialOffsetY, CGFloat, KeyboardTrackingView) { + [view setViewInitialOffsetY:[RCTConvert CGFloat: json]]; +} + +RCT_CUSTOM_VIEW_PROPERTY(scrollViewNativeID, NSString, KeyboardTrackingView) { + [view setScrollViewNativeID:json]; +} + +RCT_CUSTOM_VIEW_PROPERTY(accessoriesContainerID, NSString, KeyboardTrackingView) { + [view setAccessoriesContainerID:json]; +} + +RCT_CUSTOM_VIEW_PROPERTY(backgroundColor, NSString, KeyboardTrackingView) +{ + [view setBottomViewBackgroundColor:[RCTConvert UIColor:json]]; +} + +RCT_EXPORT_VIEW_PROPERTY(onKeyboardWillShow, RCTBubblingEventBlock) + +#pragma Commands + +RCT_EXPORT_METHOD(resetScrollView:(nonnull NSNumber *)reactTag scrollViewNativeID:(NSString *) scrollViewNativeID) { + [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { + KeyboardTrackingView *view = (KeyboardTrackingView *)viewRegistry[reactTag]; + if (!view || ![view isKindOfClass:[KeyboardTrackingView class]]) { + RCTLogError(@"Error: cannot find KeyboardTrackingView with tag #%@", reactTag); + return; + } + [view resetScrollView:scrollViewNativeID]; + }]; +} + +RCT_EXPORT_METHOD(pauseTracking:(nonnull NSNumber *)reactTag scrollViewNativeID:(NSString*)scrollViewNativeID) { + [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { + KeyboardTrackingView *view = (KeyboardTrackingView *)viewRegistry[reactTag]; + if (!view || ![view isKindOfClass:[KeyboardTrackingView class]]) { + RCTLogError(@"Error: cannot find KeyboardTrackingView with tag #%@", reactTag); + return; + } + [view pauseTracking:scrollViewNativeID]; + }]; +} + +RCT_EXPORT_METHOD(resumeTracking:(nonnull NSNumber *)reactTag scrollViewNativeID:(NSString*)scrollViewNativeID) { + [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { + KeyboardTrackingView *view = (KeyboardTrackingView *)viewRegistry[reactTag]; + if (!view || ![view isKindOfClass:[KeyboardTrackingView class]]) { + RCTLogError(@"Error: cannot find KeyboardTrackingView with tag #%@", reactTag); + return; + } + [view resumeTracking:scrollViewNativeID]; + }]; +} + +RCT_EXPORT_METHOD(scrollToStart:(nonnull NSNumber *)reactTag) +{ + [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { + KeyboardTrackingView *view = (KeyboardTrackingView *)viewRegistry[reactTag]; + if (!view || ![view isKindOfClass:[KeyboardTrackingView class]]) { + RCTLogError(@"Error: cannot find KeyboardTrackingView with tag #%@", reactTag); + return; + } + [view scrollToStart]; + }]; +} + +@end diff --git a/libraries/@mattermost/keyboard-tracker/ios/Views/KeyboardTrackingView.h b/libraries/@mattermost/keyboard-tracker/ios/Views/KeyboardTrackingView.h new file mode 100644 index 00000000000..2c651f0b2d7 --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/ios/Views/KeyboardTrackingView.h @@ -0,0 +1,50 @@ +#import +#import + +#import "ObservingInputAccessoryView.h" + +typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { + KeyboardTrackingScrollBehaviorNone, + KeyboardTrackingScrollBehaviorScrollToBottomInvertedOnly, + KeyboardTrackingScrollBehaviorFixedOffset +}; + +@interface KeyboardTrackingView : UIView +{ + NSMapTable *_inputViewsMap; + ObservingInputAccessoryView *_observingInputAccessoryView; + UIView *_bottomView; + CGFloat _bottomViewHeight; +} + +@property (nonatomic) NSMutableDictionary* _Nullable rctScrollViewsArray; +@property (nonatomic, strong) UIScrollView * _Nullable scrollViewToManage; +@property (nonatomic) BOOL scrollIsInverted; +@property (nonatomic) BOOL revealKeyboardInteractive; +@property (nonatomic) BOOL isDraggingScrollView; +@property (nonatomic) BOOL manageScrollView; +@property (nonatomic) BOOL requiresSameParentToManageScrollView; +@property (nonatomic) NSUInteger deferedInitializeAccessoryViewsCount; +@property (nonatomic) CGFloat originalHeight; +@property (nonatomic) KeyboardTrackingScrollBehavior scrollBehavior; +@property (nonatomic) BOOL addBottomView; +@property (nonatomic) BOOL scrollToFocusedInput; +@property (nonatomic) BOOL allowHitsOutsideBounds; + +@property (nonatomic) BOOL normalList; +@property (nonatomic) NSString* _Nullable scrollViewNativeID; +@property (nonatomic) CGFloat initialOffsetY; +@property (nonatomic) CGFloat viewInitialOffsetY; +@property (nonatomic) BOOL initialOffsetIsSet; +@property (nonatomic) BOOL paused; +@property (nonatomic, strong) UIView* _Nullable accessoriesContainer; +@property (nonatomic) NSString* _Nullable accessoriesContainerID; +@property (nonatomic, copy, nullable) RCTDirectEventBlock onKeyboardWillShow; + +-(void)setBottomViewBackgroundColor:(UIColor* _Nullable) color; +-(void)resetScrollView:(NSString* _Nullable) scrollViewNativeID; +-(void)pauseTracking:(NSString* _Nullable) scrollViewNativeID; +-(void)resumeTracking:(NSString* _Nullable) scrollViewNativeID; +-(void)scrollToStart; +@end + diff --git a/libraries/@mattermost/keyboard-tracker/ios/Views/KeyboardTrackingView.m b/libraries/@mattermost/keyboard-tracker/ios/Views/KeyboardTrackingView.m new file mode 100644 index 00000000000..ed6c062ef4c --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/ios/Views/KeyboardTrackingView.m @@ -0,0 +1,622 @@ +#import "KeyboardTrackingView.h" +#import +#import + +#import "UIResponder+FirstResponder.h" +#import "ObservingInputAccessoryView.h" + +#import + +NSUInteger const kInputViewKey = 101010; +NSUInteger const kMaxDeferedInitializeAccessoryViews = 15; +NSInteger const kTrackingViewNotFoundErrorCode = 1; +NSInteger const kBottomViewHeight = 34; + +@interface KeyboardTrackingView () +@end + +@implementation KeyboardTrackingView +-(instancetype)init +{ + self = [super init]; + + if (self) + { + [self addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:NULL]; + _inputViewsMap = [NSMapTable weakToWeakObjectsMapTable]; + _deferedInitializeAccessoryViewsCount = 0; + _rctScrollViewsArray = [[NSMutableDictionary alloc] init]; + + _observingInputAccessoryView = [ObservingInputAccessoryView new]; + _observingInputAccessoryView.delegate = self; + + _initialOffsetY = 0; + _initialOffsetIsSet = NO; + _viewInitialOffsetY = 0; + + _manageScrollView = YES; + _allowHitsOutsideBounds = NO; + _requiresSameParentToManageScrollView = YES; + + _bottomViewHeight = kBottomViewHeight; + + self.addBottomView = NO; + self.scrollToFocusedInput = NO; + self.paused = NO; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rctContentDidAppearNotification:) name:RCTContentDidAppearNotification object:nil]; + } + + return self; +} + +-(RCTRootView*)getRootView +{ + UIView *view = self; + while (view.superview != nil) + { + view = view.superview; + if ([view isKindOfClass:[RCTRootView class]]) + break; + } + + if ([view isKindOfClass:[RCTRootView class]]) + { + return (RCTRootView*)view; + } + return nil; +} + +- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { + if (!_allowHitsOutsideBounds) { + return [super hitTest:point withEvent:event]; + } + + if (self.isHidden || self.alpha == 0 || self.clipsToBounds) { + return nil; + } + + UIView *subview = [super hitTest:point withEvent:event]; + if (subview == nil) { + NSArray* allSubviews = [self getBreadthFirstSubviewsForView:self]; + for (UIView *tmpSubview in allSubviews) { + CGPoint pointInSubview = [self convertPoint:point toView:tmpSubview]; + if ([tmpSubview pointInside:pointInSubview withEvent:event]) { + subview = tmpSubview; + break; + } + } + } + + return subview; +} + +-(void)layoutSubviews +{ + [super layoutSubviews]; + [self updateBottomViewFrame]; +} + +- (void)initializeAccessoryViewsAndHandleInsets +{ + NSArray* allSubviews = [self getBreadthFirstSubviewsForView:[self getRootView]]; + + for (UIView* subview in allSubviews) + { + if(subview.nativeID) { + NSLog(@"self.accessoriesContainerID %@ %@", self.accessoriesContainerID, subview.nativeID); + } + + if (subview.nativeID && [subview.nativeID isEqualToString:self.accessoriesContainerID]) { + NSLog(@"SuperView ID: %@", subview.nativeID); + _accessoriesContainer = subview; + } + + if(_manageScrollView) + { + if(_scrollViewToManage == nil) + { + if([subview isKindOfClass:[RCTScrollView class]]) + { + RCTScrollView *scrollView = (RCTScrollView*)subview; + + if (subview.nativeID && [subview.nativeID isEqualToString:self.scrollViewNativeID]) { + [_rctScrollViewsArray setObject:scrollView forKey:subview.nativeID]; + _scrollViewToManage = scrollView.scrollView; + } + } + } + } + + if ([subview isKindOfClass:NSClassFromString(@"RCTTextField")]) + { + UITextField *textField = nil; + Ivar backedTextInputIvar = class_getInstanceVariable([subview class], "_backedTextInput"); + if (backedTextInputIvar != NULL) + { + textField = [subview valueForKey:@"_backedTextInput"]; + } + else if([subview isKindOfClass:[UITextField class]]) + { + textField = (UITextField*)subview; + } + [self setupTextField:textField]; + } + else if ([subview isKindOfClass:NSClassFromString(@"RCTUITextField")] && [subview isKindOfClass:[UITextField class]]) + { + [self setupTextField:(UITextField*)subview]; + } + else if ([subview isKindOfClass:NSClassFromString(@"RCTMultilineTextInputView")]) + { + [self setupTextView:[subview valueForKey:@"_backedTextInputView"]]; + } + else if ([subview isKindOfClass:NSClassFromString(@"RCTTextView")]) + { + UITextView *textView = nil; + Ivar backedTextInputIvar = class_getInstanceVariable([subview class], "_backedTextInput"); + if (backedTextInputIvar != NULL) + { + textView = [subview valueForKey:@"_backedTextInput"]; + } + else if([subview isKindOfClass:[UITextView class]]) + { + textView = (UITextView*)subview; + } + [self setupTextView:textView]; + } + else if ([subview isKindOfClass:NSClassFromString(@"RCTUITextView")] && [subview isKindOfClass:[UITextView class]]) + { + [self setupTextView:(UITextView*)subview]; + } + } + + for (RCTScrollView *scrollView in [_rctScrollViewsArray allValues]) + { + if(scrollView.scrollView == _scrollViewToManage) + { + [scrollView removeScrollListener:self]; + [scrollView addScrollListener:self]; + break; + } + } + +#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_10_3 + if (@available(iOS 11.0, *)) { + if (_scrollViewToManage != nil) { + _scrollViewToManage.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + } +#endif + + [self _updateScrollViewInsets]; + + _originalHeight = _observingInputAccessoryView.height; + + [self addBottomViewIfNecessary]; +} + +- (void)resetScrollView:(NSString*) scrollViewNativeID { + for (RCTScrollView *scrollView in [_rctScrollViewsArray allValues]) + { + [scrollView removeScrollListener:self]; + } + [_rctScrollViewsArray removeAllObjects]; + _scrollViewToManage = nil; + _scrollViewNativeID = scrollViewNativeID; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self deferedInitializeAccessoryViewsAndHandleInsets]; + [self scrollToStart]; + }); +} + +-(void)pauseTracking:(NSString*) scrollViewNativeID { + if ([self.scrollViewNativeID isEqualToString:scrollViewNativeID]) { + _observingInputAccessoryView.delegate = nil; + self.scrollViewToManage = nil; + self.accessoriesContainer = nil; + self.paused = YES; + } +} + +-(void)resumeTracking:(NSString*) scrollViewNativeID { + if ([self.scrollViewNativeID isEqualToString:scrollViewNativeID]) { + self.paused = NO; + _observingInputAccessoryView.delegate = self; + [self deferedInitializeAccessoryViewsAndHandleInsets]; + } +} + +- (void)setupTextView:(UITextView*)textView +{ + if (textView != nil) + { + [textView setInputAccessoryView:_observingInputAccessoryView]; + [textView reloadInputViews]; + [_inputViewsMap setObject:textView forKey:@(kInputViewKey)]; + } +} + +- (void)setupTextField:(UITextField*)textField +{ + if (textField != nil) + { + [textField setInputAccessoryView:_observingInputAccessoryView]; + [textField reloadInputViews]; + [_inputViewsMap setObject:textField forKey:@(kInputViewKey)]; + } +} + +-(void) deferedInitializeAccessoryViewsAndHandleInsets +{ + if(self.window == nil) + { + return; + } + + if (_observingInputAccessoryView.height == 0 && self.deferedInitializeAccessoryViewsCount < kMaxDeferedInitializeAccessoryViews) + { + self.deferedInitializeAccessoryViewsCount++; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self deferedInitializeAccessoryViewsAndHandleInsets]; + }); + } + else + { + dispatch_async(dispatch_get_main_queue(), ^{ + [self initializeAccessoryViewsAndHandleInsets]; + }); + } +} + +- (void)willMoveToWindow:(nullable UIWindow *)newWindow +{ + if (newWindow == nil && [ObservingInputAccessoryViewManager sharedInstance].activeObservingInputAccessoryView == _observingInputAccessoryView) + { + [ObservingInputAccessoryViewManager sharedInstance].activeObservingInputAccessoryView = nil; + } + else if (newWindow != nil) + { + [ObservingInputAccessoryViewManager sharedInstance].activeObservingInputAccessoryView = _observingInputAccessoryView; + } +} + +-(void)didMoveToWindow +{ + [super didMoveToWindow]; + + self.deferedInitializeAccessoryViewsCount = 0; + + [self deferedInitializeAccessoryViewsAndHandleInsets]; +} + +-(void)dealloc +{ + [self removeObserver:self forKeyPath:@"bounds"]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if (self.paused) { + return; + } + _observingInputAccessoryView.height = self.bounds.size.height; +} + +- (void)observingInputAccessoryViewKeyboardWillDisappear:(ObservingInputAccessoryView *)observingInputAccessoryView +{ + if (self.paused) { + return; + } + + _bottomViewHeight = [self getBottomSafeArea]; + [self updateBottomViewFrame]; +} + +- (NSArray*)getBreadthFirstSubviewsForView:(UIView*)view +{ + if(view == nil) + { + return nil; + } + + NSMutableArray *allSubviews = [NSMutableArray new]; + NSMutableArray *queue = [NSMutableArray new]; + + [allSubviews addObject:view]; + [queue addObject:view]; + + while ([queue count] > 0) { + UIView *current = [queue lastObject]; + [queue removeLastObject]; + + for (UIView *n in current.subviews) + { + [allSubviews addObject:n]; + [queue insertObject:n atIndex:0]; + } + } + return allSubviews; +} + +- (NSArray*)getAllReactSubviewsForView:(UIView*)view +{ + NSMutableArray *allSubviews = [NSMutableArray new]; + for (UIView *subview in view.reactSubviews) + { + [allSubviews addObject:subview]; + [allSubviews addObjectsFromArray:[self getAllReactSubviewsForView:subview]]; + } + return allSubviews; +} + +- (void)_updateScrollViewInsets +{ + if(self.scrollViewToManage != nil && !self.paused) + { + if (!_initialOffsetIsSet) { + self.initialOffsetY = self.scrollViewToManage.contentOffset.y; + _initialOffsetIsSet = YES; + } + + if (_observingInputAccessoryView.keyboardState != KeyboardStateWillHide && _observingInputAccessoryView.keyboardState != KeyboardStateHidden) { + [self.scrollViewToManage setContentOffset:CGPointMake(self.scrollViewToManage.contentOffset.x, self.initialOffsetY) animated:NO]; + } + + UIEdgeInsets insets = self.scrollViewToManage.contentInset; + CGFloat bottomSafeArea = [self getBottomSafeArea]; + CGFloat bottomInset = MAX(self.bounds.size.height, _observingInputAccessoryView.keyboardHeight + _observingInputAccessoryView.height); + + CGFloat originalBottomInset = self.scrollIsInverted ? insets.top : insets.bottom; + CGPoint originalOffset = self.scrollViewToManage.contentOffset; + CGFloat keyboardHeight = _observingInputAccessoryView.keyboardHeight; + + bottomInset += (keyboardHeight == 0 ? bottomSafeArea : 0); + if(self.scrollIsInverted) + { + insets.top = bottomInset; + } + else + { + insets.bottom = keyboardHeight; + } + self.scrollViewToManage.contentInset = insets; + + if(self.scrollBehavior == KeyboardTrackingScrollBehaviorScrollToBottomInvertedOnly && _scrollIsInverted) + { + BOOL firstTime = _observingInputAccessoryView.keyboardHeight == 0 && _observingInputAccessoryView.keyboardState == KeyboardStateHidden; + BOOL willOpen = _observingInputAccessoryView.keyboardHeight != 0 && _observingInputAccessoryView.keyboardState == KeyboardStateHidden; + BOOL isOpen = _observingInputAccessoryView.keyboardHeight != 0 && _observingInputAccessoryView.keyboardState == KeyboardStateShown; + if(firstTime || willOpen || (isOpen && !self.isDraggingScrollView)) + { + [self.scrollViewToManage setContentOffset:CGPointMake(self.scrollViewToManage.contentOffset.x, self.scrollViewToManage.contentOffset.y) animated:!firstTime]; + } + } + else if(self.scrollBehavior == KeyboardTrackingScrollBehaviorFixedOffset && !self.isDraggingScrollView) + { + CGFloat insetsDiff = (bottomInset - originalBottomInset) * (self.scrollIsInverted ? -1 : 1); + self.scrollViewToManage.contentOffset = CGPointMake(originalOffset.x, originalOffset.y + insetsDiff); + } + + CGFloat kHeight = _observingInputAccessoryView.keyboardHeight; + if (kHeight != 0 && (_observingInputAccessoryView.keyboardState == KeyboardStateShown || _observingInputAccessoryView.keyboardState == KeyboardStateWillShow)) { + kHeight -= (bottomSafeArea + _viewInitialOffsetY); + } + + CGFloat positionY = self.normalList ? 0 : kHeight; + CGRect frame = CGRectMake(self.scrollViewToManage.frame.origin.x, positionY, + self.scrollViewToManage.frame.size.width, self.scrollViewToManage.frame.size.height); + self.scrollViewToManage.frame = frame; + + if (self.accessoriesContainer) { + CGFloat containerPositionY = self.normalList ? 0 : kHeight; + self.accessoriesContainer.bounds = CGRectMake(self.accessoriesContainer.bounds.origin.x, containerPositionY, + self.accessoriesContainer.bounds.size.width, self.accessoriesContainer.bounds.size.height); + } + } +} + +#pragma mark - bottom view + +-(void)setAddBottomView:(BOOL)addBottomView +{ + _addBottomView = addBottomView; + [self addBottomViewIfNecessary]; +} + +-(void)addBottomViewIfNecessary +{ + if (self.addBottomView && _bottomView == nil) + { + _bottomView = [UIView new]; + [self addSubview:_bottomView]; + [self updateBottomViewFrame]; + } + else if (!self.addBottomView && _bottomView != nil) + { + [_bottomView removeFromSuperview]; + _bottomView = nil; + } +} + +-(void)updateBottomViewFrame +{ + if (_bottomView != nil) + { + _bottomView.frame = CGRectMake(0, self.frame.size.height, self.frame.size.width, _bottomViewHeight); + } +} + +-(void)setBottomViewBackgroundColor:(UIColor*) color { + if (_bottomView != nil) { + _bottomView.backgroundColor = color; + } +} + +#pragma mark - safe area + +-(void)safeAreaInsetsDidChange +{ +#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_10_3 + if (@available(iOS 11.0, *)) { + [super safeAreaInsetsDidChange]; + } +#endif + [self updateTransformAndInsets]; +} + +-(CGFloat)getBottomSafeArea +{ + CGFloat bottomSafeArea = 0; +#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_10_3 + if (@available(iOS 11.0, *)) { + bottomSafeArea = self.superview ? self.superview.safeAreaInsets.bottom : self.safeAreaInsets.bottom; + } +#endif + return bottomSafeArea; +} + +#pragma RCTRootView notifications + +- (void) rctContentDidAppearNotification:(NSNotification*)notification +{ + dispatch_async(dispatch_get_main_queue(), ^{ + if(notification.object == [self getRootView] && self->_manageScrollView && self->_scrollViewToManage == nil) + { + [self initializeAccessoryViewsAndHandleInsets]; + } + }); +} + +#pragma mark - ObservingInputAccessoryViewDelegate methods + +-(void)updateTransformAndInsets +{ + if (self.paused) { + return; + } + + CGFloat bottomSafeArea = [self getBottomSafeArea]; + CGFloat accessoryTranslation = MIN(-bottomSafeArea, -(_observingInputAccessoryView.keyboardHeight - _viewInitialOffsetY)); + + if (_observingInputAccessoryView.keyboardHeight <= bottomSafeArea) { + _bottomViewHeight = [self getBottomSafeArea]; + } else if (_observingInputAccessoryView.keyboardState != KeyboardStateWillHide) { + _bottomViewHeight = 0; + } + [self updateBottomViewFrame]; + + self.transform = CGAffineTransformMakeTranslation(0, accessoryTranslation); + [self _updateScrollViewInsets]; +} + +- (void)performScrollToFocusedInput +{ + if (_scrollViewToManage != nil && self.scrollToFocusedInput) + { + UIResponder *currentFirstResponder = [UIResponder currentFirstResponder]; + if (currentFirstResponder != nil && [currentFirstResponder isKindOfClass:[UIView class]]) + { + UIView *reponderView = (UIView*)currentFirstResponder; + if ([reponderView isDescendantOfView:_scrollViewToManage]) + { + CGRect frame = [_scrollViewToManage convertRect:reponderView.frame fromView:reponderView]; + frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height + 20); + [_scrollViewToManage scrollRectToVisible:frame animated:NO]; + } + } + } +} + +- (void)observingInputAccessoryViewDidChangeFrame:(ObservingInputAccessoryView*)observingInputAccessoryView +{ + [self updateTransformAndInsets]; +} + +-(void) observingInputAccessoryViewKeyboardWillAppear:(ObservingInputAccessoryView *)observingInputAccessoryView keyboardDelta:(CGFloat)keyboardDelta animationDuration:(double)animationDuration keyboardFrameEndHeight:(CGFloat)keyboardFrameEndHeight { + if (observingInputAccessoryView.keyboardHeight > 0) //prevent hiding the bottom view if an external keyboard is in use + { + _bottomViewHeight = 0; + [self updateBottomViewFrame]; + } + + [self performScrollToFocusedInput]; + _onKeyboardWillShow(@{ + @"trackingViewHeight": [NSNumber numberWithDouble:self.bounds.size.height], + @"keyboardHeight": [NSNumber numberWithDouble:[self getKeyboardHeight]], + @"contentTopInset": [NSNumber numberWithDouble:[self getScrollViewTopContentInset]], + @"animationDuration": [NSNumber numberWithDouble:animationDuration * 1000], + @"keyboardFrameEndHeight": [NSNumber numberWithDouble:keyboardFrameEndHeight], + }); +} + +#pragma mark - UIScrollViewDelegate methods + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView +{ + if(_observingInputAccessoryView.keyboardState != KeyboardStateHidden || !self.revealKeyboardInteractive) + { + return; + } + + UIView *inputView = [_inputViewsMap objectForKey:@(kInputViewKey)]; + if (inputView != nil && scrollView.contentOffset.y * (self.scrollIsInverted ? -1 : 1) > (self.scrollIsInverted ? scrollView.contentInset.top : scrollView.contentInset.bottom) + 50 && ![inputView isFirstResponder]) + { + for (UIGestureRecognizer *gesture in scrollView.gestureRecognizers) + { + if([gesture isKindOfClass:[UIPanGestureRecognizer class]]) + { + gesture.enabled = NO; + gesture.enabled = YES; + } + } + + [inputView reactFocus]; + } +} + +- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView +{ + self.isDraggingScrollView = YES; + _initialOffsetIsSet = NO; + self.initialOffsetY = scrollView.contentOffset.y; +} + +- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset +{ + self.isDraggingScrollView = NO; +} + +- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate +{ + self.isDraggingScrollView = NO; + self.initialOffsetY = scrollView.contentOffset.y; +} + +- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { + self.initialOffsetY = scrollView.contentOffset.y; +} + +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { + self.initialOffsetY = scrollView.contentOffset.y; +} + +- (CGFloat)getKeyboardHeight +{ + return _observingInputAccessoryView ? _observingInputAccessoryView.keyboardHeight : 0; +} + +-(CGFloat)getScrollViewTopContentInset +{ + return (self.scrollViewToManage != nil) ? -self.scrollViewToManage.contentInset.top : 0; +} + +-(void)scrollToStart +{ + if (self.scrollViewToManage != nil) + { + [self.scrollViewToManage setContentOffset:CGPointMake(self.scrollViewToManage.contentOffset.x, -self.scrollViewToManage.contentInset.top) animated:YES]; + } +} +@end diff --git a/libraries/@mattermost/keyboard-tracker/ios/Views/ObservingInputAccessoryView.h b/libraries/@mattermost/keyboard-tracker/ios/Views/ObservingInputAccessoryView.h new file mode 100644 index 00000000000..08dd907bdfa --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/ios/Views/ObservingInputAccessoryView.h @@ -0,0 +1,36 @@ +#import + +typedef NS_ENUM(NSUInteger, KeyboardState) { + KeyboardStateHidden, + KeyboardStateWillShow, + KeyboardStateShown, + KeyboardStateWillHide +}; + +@class ObservingInputAccessoryView; + +@interface ObservingInputAccessoryViewManager : NSObject; ++(ObservingInputAccessoryViewManager*)sharedInstance; +@property (nonatomic, weak) ObservingInputAccessoryView *activeObservingInputAccessoryView; +@end + +@protocol ObservingInputAccessoryViewDelegate + +- (void)observingInputAccessoryViewDidChangeFrame:(ObservingInputAccessoryView*)observingInputAccessoryView; + +@optional + +- (void) observingInputAccessoryViewKeyboardWillAppear:(ObservingInputAccessoryView *)observingInputAccessoryView keyboardDelta:(CGFloat)keyboardDelta animationDuration:(double)animationDuration keyboardFrameEndHeight:(CGFloat)keyboardFrameEndHeight; +- (void)observingInputAccessoryViewKeyboardWillDisappear:(ObservingInputAccessoryView*)observingInputAccessoryView; + +@end + +@interface ObservingInputAccessoryView : UIView + +@property (nonatomic, weak) id delegate; + +@property (nonatomic) CGFloat height; +@property (nonatomic, readonly) CGFloat keyboardHeight; +@property (nonatomic, readonly) KeyboardState keyboardState; + +@end diff --git a/libraries/@mattermost/keyboard-tracker/ios/Views/ObservingInputAccessoryView.m b/libraries/@mattermost/keyboard-tracker/ios/Views/ObservingInputAccessoryView.m new file mode 100644 index 00000000000..88be971db40 --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/ios/Views/ObservingInputAccessoryView.m @@ -0,0 +1,172 @@ +#import "ObservingInputAccessoryView.h" + +@implementation ObservingInputAccessoryViewManager + ++(ObservingInputAccessoryViewManager*)sharedInstance +{ + static ObservingInputAccessoryViewManager *instance = nil; + static dispatch_once_t observingInputAccessoryViewManagerOnceToken = 0; + + dispatch_once(&observingInputAccessoryViewManagerOnceToken,^ + { + if (instance == nil) + { + instance = [ObservingInputAccessoryViewManager new]; + } + }); + + return instance; +} + +@end + +@implementation ObservingInputAccessoryView +{ + CGFloat _previousKeyboardHeight; +} + +- (instancetype)init +{ + self = [super init]; + + if(self) + { + self.userInteractionEnabled = NO; + self.translatesAutoresizingMaskIntoConstraints = NO; + self.autoresizingMask = UIViewAutoresizingFlexibleHeight; + + [self registerForKeyboardNotifications]; + } + + return self; +} + +- (void) registerForKeyboardNotifications +{ + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self selector:@selector(_keyboardWillShowNotification:) name:UIKeyboardWillShowNotification object:nil]; + [notificationCenter addObserver:self selector:@selector(_keyboardDidShowNotification:) name:UIKeyboardDidShowNotification object:nil]; + [notificationCenter addObserver:self selector:@selector(_keyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil]; + [notificationCenter addObserver:self selector:@selector(_keyboardDidHideNotification:) name:UIKeyboardDidHideNotification object:nil]; + [notificationCenter addObserver:self selector:@selector(_keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil]; +} + +- (void)willMoveToSuperview:(UIView *)newSuperview +{ + if (self.superview) + { + [self.superview removeObserver:self forKeyPath:@"center"]; + } + + if (newSuperview != nil) + { + [newSuperview addObserver:self forKeyPath:@"center" options:NSKeyValueObservingOptionNew context:nil]; + } + + [super willMoveToSuperview:newSuperview]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if ((object == self.superview) && ([keyPath isEqualToString:@"center"])) + { + CGFloat centerY = self.superview.center.y; + + if([keyPath isEqualToString:@"center"]) + { + centerY = [change[NSKeyValueChangeNewKey] CGPointValue].y; + } + + CGFloat boundsH = self.superview.bounds.size.height; + + _previousKeyboardHeight = _keyboardHeight; + _keyboardHeight = MAX(0, self.window.bounds.size.height - (centerY - boundsH / 2) - self.intrinsicContentSize.height); + + [_delegate observingInputAccessoryViewDidChangeFrame:self]; + } +} + +-(void)dealloc +{ + [self.superview removeObserver:self forKeyPath:@"center"]; + + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (CGSize)intrinsicContentSize +{ + return CGSizeMake(self.bounds.size.width, _keyboardState == KeyboardStateWillShow || _keyboardState == KeyboardStateWillHide ? 0 : _height); +} + +- (void)setHeight:(CGFloat)height +{ + _height = height; + + [self invalidateIntrinsicContentSize]; +} + +- (void)_keyboardWillShowNotification:(NSNotification*)notification +{ + if (_keyboardState != KeyboardStateShown) { + _keyboardState = KeyboardStateWillShow; + + [self invalidateIntrinsicContentSize]; + + if([_delegate respondsToSelector:@selector(observingInputAccessoryViewKeyboardWillAppear:keyboardDelta:animationDuration:keyboardFrameEndHeight:)]) + { + NSDictionary *userInfo = notification.userInfo; + CGFloat delta = _keyboardHeight - _previousKeyboardHeight; + NSValue *frameEndValue = userInfo[UIKeyboardFrameEndUserInfoKey]; + CGFloat keyboardFrameEnd = [frameEndValue CGRectValue].size.height; + NSNumber *animationDurationValue = userInfo[UIKeyboardAnimationDurationUserInfoKey]; + NSTimeInterval animationDuration = [animationDurationValue doubleValue]; + + [_delegate observingInputAccessoryViewKeyboardWillAppear:self keyboardDelta:delta animationDuration:animationDuration keyboardFrameEndHeight:keyboardFrameEnd]; + } + } +} + +- (void)_keyboardDidShowNotification:(NSNotification*)notification +{ + if (_keyboardState != KeyboardStateShown) { + _keyboardState = KeyboardStateShown; + + [self invalidateIntrinsicContentSize]; + } +} + +- (void)_keyboardWillHideNotification:(NSNotification*)notification +{ + _keyboardState = KeyboardStateWillHide; + + [self invalidateIntrinsicContentSize]; + + if([_delegate respondsToSelector:@selector(observingInputAccessoryViewKeyboardWillDisappear:)]) + { + [_delegate observingInputAccessoryViewKeyboardWillDisappear:self]; + } +} + +- (void)_keyboardDidHideNotification:(NSNotification*)notification +{ + _keyboardState = KeyboardStateHidden; + + [self invalidateIntrinsicContentSize]; +} + +- (void)_keyboardWillChangeFrameNotification:(NSNotification*)notification +{ + if(self.window) + { + return; + } + + CGRect endFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; + _keyboardHeight = [UIScreen mainScreen].bounds.size.height - endFrame.origin.y; + + [_delegate observingInputAccessoryViewDidChangeFrame:self]; + + [self invalidateIntrinsicContentSize]; +} + +@end diff --git a/libraries/@mattermost/keyboard-tracker/mattermost-keyboard-tracker.podspec b/libraries/@mattermost/keyboard-tracker/mattermost-keyboard-tracker.podspec new file mode 100644 index 00000000000..30c5b07cbbf --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/mattermost-keyboard-tracker.podspec @@ -0,0 +1,23 @@ +require "json" + +package = JSON.parse(File.read(File.join(__dir__, "package.json"))) + +Pod::Spec.new do |s| + s.name = "mattermost-keyboard-tracker" + s.version = package["version"] + s.summary = package["description"] + s.homepage = package["homepage"] + s.license = package["license"] + s.authors = package["author"] + + s.platforms = { :ios => min_ios_version_supported } + s.source = { :git => ".git", :tag => "#{s.version}" } + + s.source_files = "ios/**/*.{h,m,mm}" + + install_modules_dependencies(s) + + s.pod_target_xcconfig = { + "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", + } +end diff --git a/libraries/@mattermost/keyboard-tracker/package.json b/libraries/@mattermost/keyboard-tracker/package.json new file mode 100644 index 00000000000..3b2286f7aed --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/package.json @@ -0,0 +1,16 @@ +{ + "name": "@mattermost/keyboard-tracker", + "version": "0.0.0", + "description": "component to track the keyboard", + "main": "src/index", + "codegenConfig": { + "name": "MattermostKeyboardTrackerSpec", + "type": "all", + "jsSrcsDir": "src", + "platforms": ["ios"] + }, + "author": "Mattermost, Inc.", + "license": "Apache 2.0", + "private": true, + "homepage": "#readme" +} diff --git a/libraries/@mattermost/keyboard-tracker/src/MattermostKeyboardTrackerViewNativeComponent.ts b/libraries/@mattermost/keyboard-tracker/src/MattermostKeyboardTrackerViewNativeComponent.ts new file mode 100644 index 00000000000..167ad7c1f5e --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/src/MattermostKeyboardTrackerViewNativeComponent.ts @@ -0,0 +1,70 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands'; +import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; + +import type {ColorValue, HostComponent, ViewProps} from 'react-native'; +import type {BubblingEventHandler, Double, Float, WithDefault} from 'react-native/Libraries/Types/CodegenTypes'; + +type ScrollBehavior = 'KeyboardTrackingScrollBehaviorNone' | 'KeyboardTrackingScrollBehaviorScrollToBottomInvertedOnly' | 'KeyboardTrackingScrollBehaviorFixedOffset' + +export type NativeKeyboardTrackerProps = Readonly<{ + trackingViewHeight: Double; + keyboardHeight: Double; + contentTopInset: Double; + animationDuration: Double; + keyboardFrameEndHeight: Float; +}> + +export type KeyboardWillShowEventData = { + nativeEvent: { + trackingViewHeight: number; + keyboardHeight: number; + contentTopInset: number; + animationDuration: number; + keyboardFrameEndHeight: number; + }; +} + +export interface NativeProps extends ViewProps { + scrollBehavior?: WithDefault; + revealKeyboardInteractive?: boolean; + manageScrollView?: WithDefault; + requiresSameParentToManageScrollView?: WithDefault; + addBottomView?: boolean; + scrollToFocusedInput?: boolean; + allowHitsOutsideBounds?: boolean; + normalList?: boolean; + viewInitialOffsetY?: WithDefault; + scrollViewNativeID?: string; + accessoriesContainerID?: string; + backgroundColor?: ColorValue; + onKeyboardWillShow?: BubblingEventHandler; +} + +export type MattermostKeyboardTrackerNativeComponentType = HostComponent; + +interface NativeCommands { + readonly resetScrollView: ( + viewRef: React.ElementRef, + scrollViewNativeID: string, + ) => void; + readonly pauseTracking: ( + viewRef: React.ElementRef, + scrollViewNativeID: string, + ) => void; + readonly resumeTracking: ( + viewRef: React.ElementRef, + scrollViewNativeID: string, + ) => void; + readonly scrollToStart: ( + viewRef: React.ElementRef, + ) => void; +} + +export const Commands: NativeCommands = codegenNativeCommands({ + supportedCommands: ['resetScrollView', 'pauseTracking', 'resumeTracking', 'scrollToStart'], +}); + +export default codegenNativeComponent('MattermostKeyboardTrackerView'); diff --git a/libraries/@mattermost/keyboard-tracker/src/index.tsx b/libraries/@mattermost/keyboard-tracker/src/index.tsx new file mode 100644 index 00000000000..88784a4ccde --- /dev/null +++ b/libraries/@mattermost/keyboard-tracker/src/index.tsx @@ -0,0 +1,64 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import React, {forwardRef, useCallback, useImperativeHandle, useRef} from 'react'; +import {DeviceEventEmitter} from 'react-native'; + +import MattermostKeyboardTrackerView, {Commands, type KeyboardWillShowEventData, type NativeProps} from './MattermostKeyboardTrackerViewNativeComponent'; + +export * from './MattermostKeyboardTrackerViewNativeComponent'; + +export type KeyboardTrackingViewRef = { + resetScrollView: (scrollViewNativeID: string) => void; + pauseTracking: (scrollViewNativeID: string) => void; + resumeTracking: (scrollViewNativeID: string) => void; + scrollToStart: () => void; +}; + +type Props = NativeProps & { + onKeyboardWillShow?: (e: KeyboardWillShowEventData) => void; +} + +const KeyboardTrackingView = forwardRef((props, ref) => { + const viewRef = useRef(null); + + useImperativeHandle(ref, () => ({ + resetScrollView(scrollViewNativeID: string) { + if (viewRef.current) { + Commands.resumeTracking(viewRef.current, scrollViewNativeID); + } + }, + pauseTracking(scrollViewNativeID: string) { + if (viewRef.current) { + Commands.pauseTracking(viewRef.current, scrollViewNativeID); + } + }, + resumeTracking(scrollViewNativeID: string) { + if (viewRef.current) { + Commands.resumeTracking(viewRef.current, scrollViewNativeID); + } + }, + scrollToStart() { + if (viewRef.current) { + Commands.scrollToStart(viewRef.current); + } + }, + })); + + const _onKeyboardShow = useCallback((e: KeyboardWillShowEventData) => { + DeviceEventEmitter.emit('MattermostKeyboardTrackerView', e); + props.onKeyboardWillShow?.(e); + }, [props.onKeyboardWillShow]); + + return ( + + ); +}); + +KeyboardTrackingView.displayName = 'KeyboardTrackingView'; + +export default KeyboardTrackingView; diff --git a/libraries/@mattermost/rnshare/android/build.gradle b/libraries/@mattermost/rnshare/android/build.gradle new file mode 100644 index 00000000000..0fa7cb9a425 --- /dev/null +++ b/libraries/@mattermost/rnshare/android/build.gradle @@ -0,0 +1,59 @@ +buildscript { + ext.safeExtGet = {prop, fallback -> + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback + } + repositories { + google() + gradlePluginPortal() + } + def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : "1.9.22" + dependencies { + classpath("com.android.tools.build:gradle:7.3.1") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + } +} + +def isNewArchitectureEnabled() { + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" +} + +apply plugin: 'com.android.library' +apply plugin: 'org.jetbrains.kotlin.android' +if (isNewArchitectureEnabled()) { + apply plugin: 'com.facebook.react' +} + +android { + compileSdkVersion safeExtGet('compileSdkVersion', 34) + namespace "com.mattermost.rnshare" + + defaultConfig { + minSdkVersion safeExtGet('minSdkVersion', 24) + targetSdkVersion safeExtGet('targetSdkVersion', 34) + buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()) + } + + sourceSets { + main { + if (isNewArchitectureEnabled()) { + java.srcDirs += ['src/newarch'] + } else { + java.srcDirs += ['src/oldarch'] + } + } +} +} + +repositories { + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$projectDir/../node_modules/react-native/android" + } + mavenCentral() + google() +} + +dependencies { + implementation 'com.facebook.react:react-native' + implementation 'androidx.work:work-runtime:2.8.1' +} diff --git a/libraries/@mattermost/rnshare/android/src/main/AndroidManifest.xml b/libraries/@mattermost/rnshare/android/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..376e1bea3b8 --- /dev/null +++ b/libraries/@mattermost/rnshare/android/src/main/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/MattermostShareImpl.kt b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/MattermostShareImpl.kt new file mode 100644 index 00000000000..3d7ab18ab26 --- /dev/null +++ b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/MattermostShareImpl.kt @@ -0,0 +1,150 @@ +package com.mattermost.rnshare + +import android.app.Activity +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Build +import androidx.work.Data +import androidx.work.OneTimeWorkRequest +import androidx.work.WorkManager +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReadableMap +import com.mattermost.rnshare.helpers.RealPathUtil +import com.mattermost.rnshare.helpers.toJson +import java.io.File + +class MattermostShareImpl(private val reactContext: ReactApplicationContext) { + private var tempFolder: File? = null + + companion object { + const val NAME = "MattermostShare" + } + + init { + createNotificationChannel(reactContext) + } + + fun getCurrentActivityName(): String { + val currentActivity: Activity? = reactContext.currentActivity + if (currentActivity != null) { + val activityName = currentActivity.componentName.className + val components = activityName.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() + return components[components.size - 1] + } + + return "" + } + + fun clear() { + val currentActivity: Activity? = reactContext.currentActivity + if (currentActivity != null && this.getCurrentActivityName() == "ShareActivity") { + val intent = currentActivity.intent + intent.setAction("") + intent.removeExtra(Intent.EXTRA_TEXT) + intent.removeExtra(Intent.EXTRA_STREAM) + } + } + + fun close(data: ReadableMap?) { + this.clear() + val currentActivity: Activity? = reactContext.currentActivity + if (currentActivity == null || getCurrentActivityName() != "ShareActivity") { + return + } + + if (data != null && data.hasKey("serverUrl") && data.hasKey("token")) { + val jsonObject = data.toJson() + val jsonString = jsonObject.toString() + val inputData = Data.Builder() + .putString("json_data", jsonString) + .putString("tempFolder", this.tempFolder?.absolutePath) + .build() + + val shareWorkerRequest = OneTimeWorkRequest.Builder(ShareWorker::class.java) + .setInputData(inputData) + .build() + + WorkManager.getInstance(reactContext).enqueue(shareWorkerRequest) + } + + currentActivity.finishAndRemoveTask() + } + + fun getSharedData(promise: Promise?) { + val type: String? + val action: String? + val extra: String? + val items = Arguments.createArray() + val currentActivity: Activity? = reactContext.currentActivity + + if (currentActivity != null) { + this.tempFolder = File(currentActivity.cacheDir, RealPathUtil.CACHE_DIR_NAME) + val intent = currentActivity.intent + action = intent.action + type = intent.type + extra = intent.getStringExtra(Intent.EXTRA_TEXT) + + if (Intent.ACTION_SEND == action && "text/plain" == type && extra != null) { + items.pushMap(ShareUtils.getTextItem(extra)) + } else if (Intent.ACTION_SEND == action) { + if (extra != null) { + items.pushMap(ShareUtils.getTextItem(extra)) + } + + val uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + intent.getParcelableExtra(Intent.EXTRA_STREAM, Uri::class.java) + } else { + @Suppress("DEPRECATION") + intent.getParcelableExtra(Intent.EXTRA_STREAM) + } + + if (uri != null) { + val fileInfo = ShareUtils.getFileItem(currentActivity, uri) + if (fileInfo != null) { + items.pushMap(fileInfo) + } + } + } else if (Intent.ACTION_SEND_MULTIPLE == action) { + if (extra != null) { + items.pushMap(ShareUtils.getTextItem(extra)) + } + + val uris = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM, Uri::class.java) + } else { + @Suppress("DEPRECATION") + intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM) + } + if (uris != null) { + for (uri in uris) { + val fileInfo = ShareUtils.getFileItem(currentActivity, uri) + if (fileInfo != null) { + items.pushMap(fileInfo) + } + } + } + } + } + promise?.resolve(items) + } + + private fun createNotificationChannel(context: Context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val name = "Share Channel" + val descriptionText = "Channel for sharing content notifications" + val importance = NotificationManager.IMPORTANCE_DEFAULT + val channel = NotificationChannel("SHARE_CHANNEL", name, importance).apply { + description = descriptionText + } + // Register the channel with the system + val notificationManager: NotificationManager = + context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + notificationManager.createNotificationChannel(channel) + } + } +} diff --git a/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/MattermostSharePackage.kt b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/MattermostSharePackage.kt new file mode 100644 index 00000000000..807e8d6d1f0 --- /dev/null +++ b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/MattermostSharePackage.kt @@ -0,0 +1,33 @@ +package com.mattermost.rnshare + +import com.facebook.react.TurboReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.module.model.ReactModuleInfo +import com.facebook.react.module.model.ReactModuleInfoProvider + +class MattermostSharePackage : TurboReactPackage() { + override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? { + return if (name == MattermostShareImpl.NAME) { + MattermostShareModule(reactContext) + } else { + null + } + } + + override fun getReactModuleInfoProvider(): ReactModuleInfoProvider { + return ReactModuleInfoProvider { + val moduleInfos: MutableMap = HashMap() + val isTurboModule: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + moduleInfos[MattermostShareImpl.NAME] = ReactModuleInfo( + MattermostShareImpl.NAME, + MattermostShareImpl.NAME, + false, // canOverrideExistingModule + false, // needsEagerInit + false, // isCxxModule + isTurboModule // isTurboModule + ) + moduleInfos + } + } +} diff --git a/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/ShareActivity.kt b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/ShareActivity.kt new file mode 100644 index 00000000000..62d2c62df88 --- /dev/null +++ b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/ShareActivity.kt @@ -0,0 +1,9 @@ +package com.mattermost.rnshare + +import com.facebook.react.ReactActivity + +class ShareActivity : ReactActivity() { + override fun getMainComponentName(): String { + return "MattermostShare" + } +} diff --git a/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/ShareUtils.kt b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/ShareUtils.kt new file mode 100644 index 00000000000..4cfff49a6ae --- /dev/null +++ b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/ShareUtils.kt @@ -0,0 +1,108 @@ +package com.mattermost.rnshare + +import android.app.Activity +import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.media.MediaMetadataRetriever +import android.net.Uri +import android.webkit.URLUtil +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.bridge.WritableMap +import com.mattermost.rnshare.helpers.RealPathUtil +import java.io.File +import java.io.FileOutputStream +import java.io.OutputStream +import java.io.UnsupportedEncodingException +import java.net.URLDecoder +import java.util.UUID + +object ShareUtils { + fun getTextItem(text: String?): ReadableMap { + val map = Arguments.createMap() + map.putString("value", text) + map.putString("type", "") + map.putBoolean("isString", true) + return map + } + + fun getFileItem(activity: Activity, uri: Uri): ReadableMap? { + val map = Arguments.createMap() + val filePath: String = RealPathUtil.getRealPathFromURI(activity, uri) + ?: return null + + val file = File(filePath) + var type = RealPathUtil.getMimeTypeFromUri(activity, uri) + if (type?.startsWith("image/") == true) { + val bitMapOption = getImageDimensions(filePath) + map.putInt("height", bitMapOption.outHeight) + map.putInt("width", bitMapOption.outWidth) + } else if (type?.startsWith("video/") == true) { + val cacheDir = File(activity.cacheDir, RealPathUtil.CACHE_DIR_NAME) + addVideoThumbnailToMap(cacheDir, activity.applicationContext, map, "file://$filePath") + } else { + type = "application/octet-stream" + } + + map.putString("value", "file://$filePath") + map.putDouble("size", file.length().toDouble()) + map.putString("filename", file.name) + map.putString("type", type) + map.putString("extension", RealPathUtil.getExtension(filePath)?.replaceFirst(".".toRegex(), "") ?: "") + map.putBoolean("isString", false) + return map + } + + private fun getImageDimensions(filePath: String): BitmapFactory.Options { + val bitMapOption = BitmapFactory.Options() + bitMapOption.inJustDecodeBounds = true + BitmapFactory.decodeFile(filePath, bitMapOption) + return bitMapOption + } + + private fun addVideoThumbnailToMap(cacheDir: File, context: Context, map: WritableMap, filePath: String) { + val fileName = ("thumb-" + UUID.randomUUID().toString()) + ".png" + val fOut: OutputStream? + + try { + val file = File(cacheDir, fileName) + val image = getBitmapAtTime(context, filePath) + if (file.createNewFile()) { + fOut = FileOutputStream(file) + image!!.compress(Bitmap.CompressFormat.PNG, 100, fOut) + fOut.flush() + fOut.close() + + map.putString("videoThumb", "file://" + file.absolutePath) + map.putInt("width", image.width) + map.putInt("height", image.height) + } + } catch (ignored: Exception) { + } + } + + private fun getBitmapAtTime(context: Context, filePath: String): Bitmap? { + try { + val time = 1 + val retriever = MediaMetadataRetriever() + if (URLUtil.isFileUrl(filePath)) { + val decodedPath = try { + URLDecoder.decode(filePath, "UTF-8") + } catch (e: UnsupportedEncodingException) { + filePath + } + + retriever.setDataSource(decodedPath.replace("file://", "")) + } else if (filePath.contains("content://")) { + retriever.setDataSource(context, Uri.parse(filePath)) + } + + val image = retriever.getFrameAtTime((time * 1000).toLong(), MediaMetadataRetriever.OPTION_CLOSEST_SYNC) + retriever.release() + return image + } catch (e: Exception) { + throw IllegalStateException("File doesn't exist or not supported") + } + } +} diff --git a/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/ShareWorker.kt b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/ShareWorker.kt new file mode 100644 index 00000000000..6058e1c7d21 --- /dev/null +++ b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/ShareWorker.kt @@ -0,0 +1,205 @@ +package com.mattermost.rnshare + +import android.content.pm.ServiceInfo +import android.content.Context +import android.util.Base64 +import android.util.Log +import androidx.core.app.NotificationCompat +import androidx.work.ForegroundInfo +import androidx.work.Worker +import androidx.work.WorkerParameters +import com.mattermost.rnshare.helpers.RealPathUtil +import okhttp3.CertificatePinner +import okhttp3.MediaType +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.asRequestBody +import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.ResponseBody +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import java.io.File +import java.io.IOException +import java.io.InputStream +import java.security.MessageDigest +import java.security.cert.CertificateFactory +import java.security.cert.X509Certificate +import java.util.Objects + +class ShareWorker(private val context: Context, workerParameters: WorkerParameters) : Worker(context, workerParameters) { + private val jsonType: MediaType? = "application/json; charset=utf-8".toMediaTypeOrNull() + private val okHttpClient: OkHttpClient + get() { + val builder = OkHttpClient.Builder() + val fingerprintsMap = getCertificatesFingerPrints() + if (fingerprintsMap.isNotEmpty()) { + val pinner = CertificatePinner.Builder() + for ((domain, fingerprints) in fingerprintsMap) { + for (fingerprint in fingerprints) { + pinner.add(domain, "sha256/$fingerprint") + } + } + val certificatePinner = pinner.build() + builder.certificatePinner(certificatePinner) + } + return builder.build() + } + + private fun getCertificateFingerPrint(certInputStream: InputStream): String { + val certFactory = CertificateFactory.getInstance("X.509") + val certificate = certFactory.generateCertificate(certInputStream) as X509Certificate + val sha256 = MessageDigest.getInstance("SHA-256") + Base64.encodeToString(sha256.digest(certificate.publicKey.encoded), Base64.NO_WRAP) + val fingerprintBytes = sha256.digest(certificate.publicKey.encoded) + return Base64.encodeToString(fingerprintBytes, Base64.NO_WRAP) + } + + private fun getCertificatesFingerPrints(): Map> { + val fingerprintsMap = mutableMapOf>() + val assetsManager = context.assets + val certFiles = assetsManager.list("certs")?.filter { it.endsWith(".cer") || it.endsWith(".crt") } ?: return emptyMap() + + for (fileName in certFiles) { + val domain = fileName.substringBeforeLast(".") + val certInputStream = assetsManager.open("certs/$fileName") + certInputStream.use { + val fingerprint = getCertificateFingerPrint(it) + if (fingerprintsMap.containsKey(domain)) { + fingerprintsMap[domain]?.add(fingerprint) + } else { + fingerprintsMap[domain] = mutableListOf(fingerprint) + } + } + } + + return fingerprintsMap + } + + override fun doWork(): Result { + val jsonString = inputData.getString("json_data") ?: return Result.failure() + val tempFolder = inputData.getString("tempFolder") + + try { + val jsonObject = JSONObject(jsonString) + val files = if (jsonObject.has("files")) jsonObject.getJSONArray("files") else null + val serverUrl = jsonObject.getString("serverUrl") + val token = jsonObject.getString("token") + val postData = buildPostObject(jsonObject) + if (files != null && files.length() > 0) { + setForegroundAsync(createForegroundInfo()) + return uploadFiles(serverUrl, token, files, postData) + } else { + try { + return post(serverUrl, token, postData) + } catch (e: IOException) { + Log.e(MattermostShareImpl.NAME, "Error sending the post", e) + return Result.failure() + } + } + } catch (e: JSONException) { + Log.e(MattermostShareImpl.NAME, "Failed to create the body to share the content", e) + return Result.failure() + } finally { + tempFolder?.let { RealPathUtil.deleteTempFiles(File(it)) } + } + } + + private fun buildPostObject(data: JSONObject): JSONObject { + val json = JSONObject() + try { + json.put("user_id", data.getString("userId")) + json.put("channel_id", data.getString("channelId")) + json.put("message", data.getString("message")) + } catch (e: JSONException) { + Log.e(MattermostShareImpl.NAME, "Failed to create the post object", e) + } + return json + } + + @Throws(IOException::class) + private fun post(serverUrl: String, token: String, postData: JSONObject): Result { + val body = postData.toString().toRequestBody(jsonType) + val request = Request.Builder() + .header("Authorization", "BEARER $token") + .url("$serverUrl/api/v4/posts") + .post(body) + .build() + + val response = okHttpClient.newCall(request).execute() + response.body?.close() + response.close() + return Result.success() + } + + private fun uploadFiles(serverUrl: String, token: String, files: JSONArray, postData: JSONObject): Result { + try { + val builder = MultipartBody.Builder() + .setType(MultipartBody.FORM) + + for (i in 0 until files.length()) { + val file = files.getJSONObject(i) + val mime = file.getString("type") + val fullPath = file.getString("value") + val filePath = fullPath.replaceFirst("file://".toRegex(), "") + val fileInfo = File(filePath) + if (fileInfo.exists()) { + val mediaType = mime.toMediaType() + builder.addFormDataPart("files", file.getString("filename"), fileInfo.asRequestBody(mediaType)) + } + } + + builder.addFormDataPart("channel_id", postData.getString("channel_id")) + val body: RequestBody = builder.build() + val request = Request.Builder() + .header("Authorization", "BEARER $token") + .url("$serverUrl/api/v4/files") + .post(body) + .build() + + try { + okHttpClient.newCall(request).execute().use { response -> + if (response.isSuccessful) { + val responseData = Objects.requireNonNull(response.body).string() + val responseJson = JSONObject(responseData) + + response.body?.close() + response.close() + + val fileInfoArray = responseJson.getJSONArray("file_infos") + val fileIds = JSONArray() + for (i in 0 until fileInfoArray.length()) { + val fileInfo = fileInfoArray.getJSONObject(i) + fileIds.put(fileInfo.getString("id")) + } + postData.put("file_ids", fileIds) + return post(serverUrl, token, postData) + } + return Result.failure() + } + } catch (e: IOException) { + Log.e(MattermostShareImpl.NAME, "Failed to upload the files and post", e) + return Result.failure() + } + } catch (e: JSONException) { + Log.e(MattermostShareImpl.NAME, "Failed to create the multipart body to upload the files", e) + return Result.failure() + } + } + + private fun createForegroundInfo(): ForegroundInfo { + val notification = NotificationCompat.Builder(applicationContext, "SHARE_CHANNEL") + .setContentTitle("Uploading Files") + .setTicker("Uploading Files") + .setContentText("File upload in progress") + .setSmallIcon(applicationContext.resources.getIdentifier("ic_notification", "mipmap", applicationContext.packageName)) + .setOngoing(true) + .build() + return ForegroundInfo(1, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC) + + } +} diff --git a/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/helpers/Extensions.kt b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/helpers/Extensions.kt new file mode 100644 index 00000000000..578f1c04d4b --- /dev/null +++ b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/helpers/Extensions.kt @@ -0,0 +1,39 @@ +package com.mattermost.rnshare.helpers + +import com.facebook.react.bridge.ReadableArray +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.bridge.ReadableType +import org.json.JSONArray +import org.json.JSONObject + +fun ReadableArray.toJson(): JSONArray { + val jsonArray = JSONArray() + for (i in 0 until this.size()) { + when (this.getType(i)) { + ReadableType.Null -> jsonArray.put(JSONObject.NULL) + ReadableType.Boolean -> jsonArray.put(this.getBoolean(i)) + ReadableType.Number -> jsonArray.put(this.getDouble(i)) + ReadableType.String -> jsonArray.put(this.getString(i)) + ReadableType.Map -> jsonArray.put(this.getMap(i).toJson()) + ReadableType.Array -> jsonArray.put(this.getArray(i).toJson()) + } + } + return jsonArray +} + +fun ReadableMap.toJson(): JSONObject { + val jsonObject = JSONObject() + val iterator = this.keySetIterator() + while (iterator.hasNextKey()) { + val key = iterator.nextKey() + when (this.getType(key)) { + ReadableType.Null -> jsonObject.put(key, JSONObject.NULL) + ReadableType.Boolean -> jsonObject.put(key, this.getBoolean(key)) + ReadableType.Number -> jsonObject.put(key, this.getDouble(key)) + ReadableType.String -> jsonObject.put(key, this.getString(key)) + ReadableType.Map -> jsonObject.put(key, this.getMap(key)!!.toJson()) + ReadableType.Array -> jsonObject.put(key, this.getArray(key)!!.toJson()) + } + } + return jsonObject +} diff --git a/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/helpers/RealPathUtil.kt b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/helpers/RealPathUtil.kt new file mode 100644 index 00000000000..4d9b6eae7f1 --- /dev/null +++ b/libraries/@mattermost/rnshare/android/src/main/java/com/mattermost/rnshare/helpers/RealPathUtil.kt @@ -0,0 +1,182 @@ +package com.mattermost.rnshare.helpers + +import android.content.Context +import android.net.Uri +import android.provider.DocumentsContract +import android.provider.OpenableColumns +import android.text.TextUtils +import android.util.Log +import java.io.File +import java.io.FileInputStream +import java.io.FileOutputStream +import java.io.IOException + +object RealPathUtil { + const val CACHE_DIR_NAME: String = "mmShare" + + init { + deleteTempFiles(File(CACHE_DIR_NAME)) + } + + fun getRealPathFromURI(context:Context, uri:Uri?): String? { + if (uri == null) { + return null + } + // DocumentProvider + if (DocumentsContract.isDocumentUri(context, uri)) { + // ExternalStorageProvider + if (isExternalStorageDocument(uri)) { + val docId = DocumentsContract.getDocumentId(uri) + val split = docId.split((":").toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() + val type = split[0] + if ("primary".equals(type, ignoreCase = true)) { + return context.getExternalFilesDir(split[1])?.absolutePath + } + } else if (isDownloadsDocument(uri)) { + // DownloadsProvider + val id = DocumentsContract.getDocumentId(uri) + if (!TextUtils.isEmpty(id)) { + if (id.startsWith("raw:")) { + return id.replaceFirst(("raw:").toRegex(), "") + } + + try { + return getPathFromSavingTempFile(context, uri) + } catch (e:NumberFormatException) { + Log.e("ReactNative", "DownloadsProvider unexpected uri $uri") + return null + } + } + } + else if (isMediaDocument(uri)) { + // MediaProvider + return getPathFromSavingTempFile(context, uri) + } + } + if ("content".equals(uri.scheme, ignoreCase = true)) { + // MediaStore (and general) + if (isGooglePhotosUri(uri)) { + return uri.lastPathSegment + } + // Try save to tmp file, and return tmp file path + return getPathFromSavingTempFile(context, uri) + } + else if ("file".equals(uri.scheme, ignoreCase = true)) { + return uri.path + } + return null + } + + private fun getPathFromSavingTempFile(context:Context, uri:Uri): String? { + val tmpFile:File + var fileName: String? = null + // Try and get the filename from the Uri + try + { + val returnCursor = context.contentResolver.query(uri, null, null, null, null) + val nameIndex = returnCursor?.getColumnIndex(OpenableColumns.DISPLAY_NAME) + returnCursor?.moveToFirst() + fileName = sanitizeFilename(nameIndex?.let { returnCursor.getString(it) }) + returnCursor?.close() + } catch (e:Exception) { + // just continue to get the filename with the last segment of the path + } + + try + { + if (fileName == null) { + fileName = sanitizeFilename(uri.lastPathSegment.toString().trim()) + } + val cacheDir = File(context.cacheDir, CACHE_DIR_NAME) + if (!cacheDir.exists()) { + cacheDir.mkdirs() + } + tmpFile = File(cacheDir, fileName!!) + tmpFile.createNewFile() + val pfd = context.contentResolver.openFileDescriptor(uri, "r") + val src = FileInputStream(pfd?.fileDescriptor).channel + val dst = FileOutputStream(tmpFile).channel + dst.transferFrom(src, 0, src.size()) + src.close() + dst.close() + pfd?.close() + } + catch (ex:IOException) { + return null + } + return tmpFile.absolutePath + } + + private fun sanitizeFilename(filename: String?): String? { + if (filename == null) { + return null + } + + val f = File(filename) + return f.name + } + + private fun isExternalStorageDocument(uri:Uri):Boolean { + return "com.android.externalstorage.documents" == uri.authority + } + + private fun isDownloadsDocument(uri:Uri):Boolean { + return "com.android.providers.downloads.documents" == uri.authority + } + + private fun isMediaDocument(uri:Uri):Boolean { + return "com.android.providers.media.documents" == uri.authority + } + + private fun isGooglePhotosUri(uri:Uri):Boolean { + return "com.google.android.apps.photos.content" == uri.authority + } + + fun getExtension(uri: String?): String? { + if (uri == null) { + return null + } + + val dot = uri.lastIndexOf(".") + return if (dot >= 0) + { + uri.substring(dot) + } else { + // No extension. + "" + } + } + + fun getMimeTypeFromUri(context: Context, uri: Uri): String? { + try { + val cR = context.contentResolver + return cR.getType(uri) + } catch (e: java.lang.Exception) { + return "application/octet-stream" + } + } + + fun deleteTempFiles(dir: File) { + try + { + if (dir.isDirectory) { + deleteRecursive(dir) + } + } + catch (e:Exception) { + // do nothing + } + } + + private fun deleteRecursive(fileOrDirectory:File) { + if (fileOrDirectory.isDirectory) { + val files = fileOrDirectory.listFiles() + if (files?.size!! > 0) { + for (child in files) { + deleteRecursive(child) + } + } + fileOrDirectory.delete() + } + } +} diff --git a/libraries/@mattermost/rnshare/android/src/newarch/MattermostShareModule.kt b/libraries/@mattermost/rnshare/android/src/newarch/MattermostShareModule.kt new file mode 100644 index 00000000000..a6b37123e12 --- /dev/null +++ b/libraries/@mattermost/rnshare/android/src/newarch/MattermostShareModule.kt @@ -0,0 +1,23 @@ +package com.mattermost.rnshare + +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReadableMap + +class MattermostShareModule(private val reactContext: ReactApplicationContext) : NativeMattermostShareSpec(reactContext) { + private var implementation = MattermostShareImpl(reactContext) + + override fun getCurrentActivityName(): String = implementation.getCurrentActivityName() + + override fun clear() { + implementation.clear() + } + + override fun close(data: ReadableMap?) { + implementation.close(data) + } + + override fun getSharedData(promise: Promise?) { + implementation.getSharedData(promise) + } +} diff --git a/libraries/@mattermost/rnshare/android/src/oldarch/MattermostShareModule.kt b/libraries/@mattermost/rnshare/android/src/oldarch/MattermostShareModule.kt new file mode 100644 index 00000000000..f3bf9151ebc --- /dev/null +++ b/libraries/@mattermost/rnshare/android/src/oldarch/MattermostShareModule.kt @@ -0,0 +1,31 @@ +package com.mattermost.rnshare + +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.bridge.ReadableMap + +class MattermostShareModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { + private val implementation = MattermostShareImpl(reactContext) + + override fun getName(): String = MattermostShareImpl.NAME + + @ReactMethod(isBlockingSynchronousMethod = true) + fun getCurrentActivityName(): String = implementation.getCurrentActivityName() + + @ReactMethod + fun clear() { + implementation.clear() + } + + @ReactMethod + fun close(data: ReadableMap?) { + implementation.close(data) + } + + @ReactMethod + fun getSharedData(promise: Promise?) { + implementation.getSharedData(promise) + } +} diff --git a/libraries/@mattermost/rnshare/package.json b/libraries/@mattermost/rnshare/package.json new file mode 100644 index 00000000000..7b64b351289 --- /dev/null +++ b/libraries/@mattermost/rnshare/package.json @@ -0,0 +1,19 @@ +{ + "name": "@mattermost/rnshare", + "version": "0.0.0", + "description": "Mattermost Share extension for android", + "main": "src/index", + "codegenConfig": { + "name": "MattermostShareSpec", + "type": "modules", + "jsSrcsDir": "src", + "platforms": ["android"], + "android": { + "javaPackageName": "com.mattermost.rnshare" + } + }, + "author": "Mattermost, Inc.", + "license": "Apache 2.0", + "private": true, + "homepage": "#readme" +} diff --git a/libraries/@mattermost/rnshare/src/NativeMattermostShare.ts b/libraries/@mattermost/rnshare/src/NativeMattermostShare.ts new file mode 100644 index 00000000000..9c939ec9d53 --- /dev/null +++ b/libraries/@mattermost/rnshare/src/NativeMattermostShare.ts @@ -0,0 +1,36 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {type TurboModule, TurboModuleRegistry} from 'react-native'; + +import type {Double} from 'react-native/Libraries/Types/CodegenTypes'; + +export type SharedItem = Readonly<{ + extension: string; + filename?: string; + isString: boolean; + size?: Double; + type: string; + value: string; + height?: Double; + width?: Double; + videoThumb?: string; +}>; + +export type ShareExtensionDataToSend = { + channelId: string; + files: SharedItem[]; + message: string; + serverUrl: string; + token: string; + userId: string; +} + +export interface Spec extends TurboModule { + getCurrentActivityName: () => string; + clear: () => void; + close: (data: ShareExtensionDataToSend | null) => void; + getSharedData: () => Promise; +} + +export default TurboModuleRegistry.getEnforcing('MattermostShare'); diff --git a/libraries/@mattermost/rnshare/src/index.tsx b/libraries/@mattermost/rnshare/src/index.tsx new file mode 100644 index 00000000000..63a8bc71646 --- /dev/null +++ b/libraries/@mattermost/rnshare/src/index.tsx @@ -0,0 +1,32 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {NativeModules, Platform} from 'react-native'; + +import type {Spec, SharedItem as Item, ShareExtensionDataToSend as DataToSend} from './NativeMattermostShare'; + +const LINKING_ERROR = + 'The package \'mattermost-share\' doesn\'t seem to be linked. Make sure: \n\n' + + Platform.select({ios: "- You have run 'pod install'\n", default: ''}) + + '- You rebuilt the app after installing the package\n' + + '- You are not using Expo Go\n'; + +// @ts-expect-error global +const isTurboModuleEnabled = global.__turboModuleProxy != null; + +const MattermostShareModule: Spec = isTurboModuleEnabled ? require('./NativeMattermostShare').default : NativeModules.MattermostShare; + +const MattermostShare = MattermostShareModule || new Proxy( + {}, + { + get() { + throw new Error(LINKING_ERROR); + }, + }, +); + +export type SharedItem = Item; +export type ShareExtensionDataToSend = DataToSend; + +export default MattermostShare; + diff --git a/libraries/@mattermost/rnutils/android/build.gradle b/libraries/@mattermost/rnutils/android/build.gradle new file mode 100644 index 00000000000..d924db57a25 --- /dev/null +++ b/libraries/@mattermost/rnutils/android/build.gradle @@ -0,0 +1,64 @@ +buildscript { + ext.safeExtGet = {prop, fallback -> + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback + } + repositories { + google() + gradlePluginPortal() + } + def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : "1.9.22" + dependencies { + classpath("com.android.tools.build:gradle:7.3.1") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + } +} + +def isNewArchitectureEnabled() { + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" +} + +apply plugin: 'com.android.library' +apply plugin: 'org.jetbrains.kotlin.android' +if (isNewArchitectureEnabled()) { + apply plugin: 'com.facebook.react' +} + +android { + compileSdkVersion safeExtGet('compileSdkVersion', 34) + namespace "com.mattermost.rnutils" + + defaultConfig { + minSdkVersion safeExtGet('minSdkVersion', 24) + targetSdkVersion safeExtGet('targetSdkVersion', 34) + buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()) + } + + sourceSets { + main { + if (isNewArchitectureEnabled()) { + java.srcDirs += ['src/newarch'] + } else { + java.srcDirs += ['src/oldarch'] + } + } +} +} + +repositories { + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$projectDir/../node_modules/react-native/android" + } + mavenCentral() + google() +} + +dependencies { + implementation 'com.facebook.react:react-native' + implementation 'androidx.window:window:1.2.0' + implementation 'androidx.window:window-core:1.2.0' + implementation 'androidx.window:window-rxjava3:1.2.0' + + implementation 'io.reactivex.rxjava3:rxjava:3.1.6' + implementation 'io.reactivex.rxjava3:rxandroid:3.0.2' +} diff --git a/libraries/@mattermost/rnutils/android/src/main/AndroidManifest.xml b/libraries/@mattermost/rnutils/android/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..4b34f55fb98 --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/RNUtilsModuleImpl.kt b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/RNUtilsModuleImpl.kt new file mode 100644 index 00000000000..d79ae9bef68 --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/RNUtilsModuleImpl.kt @@ -0,0 +1,124 @@ +package com.mattermost.rnutils + +import android.app.Activity +import android.net.Uri +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.bridge.WritableMap +import com.mattermost.rnutils.helpers.Notifications +import com.mattermost.rnutils.helpers.RealPathUtil +import com.mattermost.rnutils.helpers.SaveDataTask +import com.mattermost.rnutils.helpers.SplitView + +class RNUtilsModuleImpl(private val reactContext: ReactApplicationContext) { + companion object { + const val NAME = "RNUtils" + + private var context: ReactApplicationContext? = null + private var hasRegisteredLoad = false + + fun sendJSEvent(eventName: String, data: ReadableMap?) { + if (context?.hasActiveReactInstance() == true) { + context?.emitDeviceEvent(eventName, data) + } + } + + private fun setCtx(reactContext: ReactApplicationContext) { + context = reactContext + } + } + + init { + setCtx(reactContext) + SplitView.setCtx(reactContext) + Notifications.setCtx(reactContext) + } + + fun getTypedExportedConstants(): MutableMap { + val map = mutableMapOf() + val group = mutableMapOf() + map["appGroupIdentifier"] = "" + group["sharedDirectory"] = "" + group["databasePath"] = "" + map["appGroupSharedDirectory"] = group + return map + } + + fun getRealFilePath(filePath: String?, promise: Promise?) { + val currentActivity: Activity? = reactContext.currentActivity + var result = "" + + if (currentActivity != null) { + val uri = Uri.parse(filePath) + val path: String? = RealPathUtil.getRealPathFromURI(reactContext, uri) + if (path != null) { + result = "file://$path" + } + } + + promise?.resolve(result) + } + + fun saveFile(filePath: String?, promise: Promise?) { + val task = SaveDataTask(reactContext) + task.saveFile(filePath, promise) + } + + fun isRunningInSplitView(): WritableMap? { + return SplitView.isRunningInSplitView() + } + + fun getWindowDimensions(): WritableMap? { + return SplitView.getWindowDimensions() + } + + fun setHasRegisteredLoad() { + hasRegisteredLoad = true + } + + fun getHasRegisteredLoad(): WritableMap { + val map = Arguments.createMap() + map.putBoolean("hasRegisteredLoad", hasRegisteredLoad) + return map + } + + fun unlockOrientation() {} + + fun lockPortrait() {} + + fun deleteDatabaseDirectory(databaseName: String?, shouldRemoveDirectory: Boolean): WritableMap { + val map = Arguments.createMap() + map.putNull("error") + map.putBoolean("success", true) + return map + } + + fun renameDatabase(databaseName: String?, newDatabaseName: String?): WritableMap { + val map = Arguments.createMap() + map.putNull("error") + map.putBoolean("success", true) + return map + } + + fun deleteEntitiesFile(): Boolean { + return true + } + + fun getDeliveredNotifications(promise: Promise?) { + Notifications.getDeliveredNotifications(promise) + } + + fun removeChannelNotifications(serverUrl: String?, channelId: String?) { + serverUrl?.let { channelId?.let { it1 -> Notifications.removeChannelNotifications(it, it1) } } + } + + fun removeThreadNotifications(serverUrl: String?, threadId: String?) { + serverUrl?.let { threadId?.let { it1 -> Notifications.removeThreadNotifications(it, it1) } } + } + + fun removeServerNotifications(serverUrl: String?) { + serverUrl?.let { Notifications.removeServerNotifications(it) } + } +} diff --git a/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/RNUtilsPackage.kt b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/RNUtilsPackage.kt new file mode 100644 index 00000000000..7c8c0b6504c --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/RNUtilsPackage.kt @@ -0,0 +1,30 @@ +package com.mattermost.rnutils + +import com.facebook.react.TurboReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.module.model.ReactModuleInfo +import com.facebook.react.module.model.ReactModuleInfoProvider + +class RNUtilsPackage : TurboReactPackage() { + override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? { + return if (name == RNUtilsModuleImpl.NAME) { + RNUtilsModule(reactContext) + } else { + null + } + } + + override fun getReactModuleInfoProvider() = ReactModuleInfoProvider { + mapOf( + RNUtilsModuleImpl.NAME to ReactModuleInfo( + RNUtilsModuleImpl.NAME, + RNUtilsModuleImpl.NAME, + false, + false, + false, + BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + ) + ) + } +} diff --git a/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/enums/Events.kt b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/enums/Events.kt new file mode 100644 index 00000000000..9bb7ad8bb10 --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/enums/Events.kt @@ -0,0 +1,7 @@ +package com.mattermost.rnutils.enums + +enum class Events(val event: String) { + SAVE_ERROR_EVENT("SaveError"), + SPLIT_VIEW_CHANGED("SplitViewChanged"), + DIMENSIONS_CHANGED("DimensionsChanged") +} diff --git a/android/app/src/main/java/com/mattermost/rnbeta/FoldableObserver.kt b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/FoldableObserver.kt similarity index 59% rename from android/app/src/main/java/com/mattermost/rnbeta/FoldableObserver.kt rename to libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/FoldableObserver.kt index c51a7df38ea..9a65d905a4b 100644 --- a/android/app/src/main/java/com/mattermost/rnbeta/FoldableObserver.kt +++ b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/FoldableObserver.kt @@ -1,6 +1,7 @@ -package com.mattermost.rnbeta +package com.mattermost.rnutils.helpers import android.app.Activity +import android.graphics.Rect import androidx.window.core.layout.WindowHeightSizeClass import androidx.window.core.layout.WindowSizeClass import androidx.window.core.layout.WindowWidthSizeClass @@ -12,11 +13,14 @@ import androidx.window.rxjava3.layout.windowLayoutInfoObservable import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.disposables.Disposable +import java.lang.ref.WeakReference -class FoldableObserver(private val activity: Activity) { +class FoldableObserver(activity: Activity) { private var disposable: Disposable? = null private lateinit var observable: Observable - public var isDeviceFolded: Boolean = false + var isDeviceFolded: Boolean = false + private val activityRef = WeakReference(activity) + private var windowBounds: Rect? = null companion object { private var instance: FoldableObserver? = null @@ -25,18 +29,23 @@ class FoldableObserver(private val activity: Activity) { if (instance == null) { instance = FoldableObserver(activity) } - return instance!! } fun getInstance(): FoldableObserver? { return instance } + + fun clearInstance() { + instance = null + } } fun onCreate() { + val activity = activityRef.get() ?: return observable = WindowInfoTracker.getOrCreate(activity) .windowLayoutInfoObservable(activity) + this.windowBounds = getWindowSize() } fun onStart() { @@ -45,9 +54,9 @@ class FoldableObserver(private val activity: Activity) { } disposable = observable.observeOn(AndroidSchedulers.mainThread()) .subscribe { layoutInfo -> - val splitViewModule = SplitViewModule.getInstance() setIsDeviceFolded(layoutInfo) - splitViewModule?.setDeviceFolded() + handleWindowLayoutInfo(layoutInfo) + SplitView.setDeviceFolded() } } @@ -55,6 +64,11 @@ class FoldableObserver(private val activity: Activity) { disposable?.dispose() } + fun onDestroy() { + onStop() + clearInstance() + } + private fun setIsDeviceFolded(layoutInfo: WindowLayoutInfo) { val foldingFeature = layoutInfo.displayFeatures .filterIsInstance() @@ -68,24 +82,57 @@ class FoldableObserver(private val activity: Activity) { } } - fun isCompactView(): Boolean { + private fun handleWindowLayoutInfo(windowLayoutInfo: WindowLayoutInfo) { + val bounds = getWindowSize() + + if (bounds?.width() != windowBounds?.width()) { + // emit the dimensions changed event + windowBounds = bounds + SplitView.emitDimensionsChanged() + } + } + + + private fun getWindowSize(): Rect? { + val activity = activityRef.get() ?: return null val metrics = WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(activity) - val width = metrics.bounds.width() - val height = metrics.bounds.height() + val bounds = metrics.bounds + val widthPx = bounds.width() + val heightPx = bounds.height() + + // Get the screen density (scale factor) + val displayMetrics = activity.resources.displayMetrics + val density = displayMetrics.density + + // Adjust dimensions based on the scale factor (density) + val widthDp = (widthPx / density).toInt() + val heightDp = (heightPx / density).toInt() + return Rect(0, 0, widthDp, heightDp) + } + + fun getWindowDimensions(): Rect? { + return this.windowBounds; + } + + fun isCompactView(): Boolean { + val activity = activityRef.get() ?: return false + val bounds = getWindowSize() + val width = bounds?.width() ?: 0 + val height = bounds?.height() ?: 0 val density = activity.resources.displayMetrics.density - val windowSizeClass = WindowSizeClass.compute(width/density, height/density) + val windowSizeClass = WindowSizeClass.compute(width / density, height / density) val widthWindowSizeClass = windowSizeClass.windowWidthSizeClass val heightWindowSizeClass = windowSizeClass.windowHeightSizeClass return widthWindowSizeClass === WindowWidthSizeClass.COMPACT || heightWindowSizeClass === WindowHeightSizeClass.COMPACT } - private fun isTableTopPosture(foldFeature : FoldingFeature?) : Boolean { + private fun isTableTopPosture(foldFeature: FoldingFeature?): Boolean { return foldFeature?.state == FoldingFeature.State.HALF_OPENED && foldFeature.orientation == FoldingFeature.Orientation.HORIZONTAL } - private fun isBookPosture(foldFeature : FoldingFeature?) : Boolean { + private fun isBookPosture(foldFeature: FoldingFeature?): Boolean { return foldFeature?.state == FoldingFeature.State.HALF_OPENED && foldFeature.orientation == FoldingFeature.Orientation.VERTICAL } diff --git a/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/NotificationHelper.kt b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/NotificationHelper.kt new file mode 100644 index 00000000000..a8f3450368d --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/NotificationHelper.kt @@ -0,0 +1,296 @@ +package com.mattermost.rnutils.helpers + +import android.app.NotificationManager +import android.content.Context +import android.os.Bundle +import android.service.notification.StatusBarNotification +import android.text.TextUtils +import androidx.core.app.NotificationManagerCompat +import org.json.JSONException +import org.json.JSONObject + +object NotificationHelper { + private const val PUSH_NOTIFICATIONS: String = "PUSH_NOTIFICATIONS" + private const val NOTIFICATIONS_IN_GROUP: String = "notificationsInGroup" + private const val VERSION_PREFERENCE = "VERSION_PREFERENCE" + const val MESSAGE_NOTIFICATION_ID: Int = 435345 + + fun cleanNotificationPreferencesIfNeeded(context: Context) { + try { + val pInfo = context.packageManager.getPackageInfo(context.packageName, 0) + val version = pInfo.versionName + var storedVersion: String? = null + val pSharedPref = context.getSharedPreferences(VERSION_PREFERENCE, Context.MODE_PRIVATE) + if (pSharedPref != null) { + storedVersion = pSharedPref.getString("Version", "") + } + + if (version != storedVersion) { + if (pSharedPref != null) { + val editor = pSharedPref.edit() + editor.putString("Version", version) + editor.apply() + } + + val inputMap: Map = HashMap() + saveMap(context, inputMap) + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + fun getNotificationId(notification: Bundle): Int { + val postId = notification.getString("post_id") + val channelId = notification.getString("channel_id") + + var notificationId: Int = MESSAGE_NOTIFICATION_ID + if (postId != null) { + notificationId = postId.hashCode() + } else if (channelId != null) { + notificationId = channelId.hashCode() + } + + return notificationId + } + + fun getDeliveredNotifications(context: Context): Array { + val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + return notificationManager.activeNotifications + } + + fun addNotificationToPreferences(context: Context, notificationId: Int, notification: Bundle): Boolean { + try { + var createSummary = true + val serverUrl = notification.getString("server_url") + val channelId = notification.getString("channel_id") + val rootId = notification.getString("root_id") + val isCRTEnabled = notification.containsKey("is_crt_enabled") && notification.getString("is_crt_enabled") == "true" + + val isThreadNotification = isCRTEnabled && !TextUtils.isEmpty(rootId) + val groupId = if (isThreadNotification) rootId else channelId + + val notificationsPerServer = loadMap(context) + var notificationsInServer = notificationsPerServer[serverUrl] + if (notificationsInServer == null) { + notificationsInServer = JSONObject() + } + + var notificationsInGroup = notificationsInServer.optJSONObject(groupId) + if (notificationsInGroup == null) { + notificationsInGroup = JSONObject() + } + + if (notificationsInGroup.length() > 0) { + createSummary = false + } + + notificationsInGroup.put(notificationId.toString(), false) + + if (createSummary) { + // Add the summary notification id as well + notificationsInGroup.put((notificationId + 1).toString(), true) + } + notificationsInServer.put(groupId, notificationsInGroup) + notificationsPerServer[serverUrl] = notificationsInServer + saveMap(context, notificationsPerServer) + + return createSummary + } catch (e: Exception) { + e.printStackTrace() + return false + } + } + + fun dismissNotification(context: Context, notification: Bundle) { + val isCRTEnabled = notification.containsKey("is_crt_enabled") && notification.getString("is_crt_enabled") == "true" + val serverUrl = notification.getString("server_url") + val channelId = notification.getString("channel_id") + val rootId = notification.getString("root_id") + + val notificationId = getNotificationId(notification) + + if (!TextUtils.isEmpty(serverUrl) && !TextUtils.isEmpty(channelId)) { + val isThreadNotification = isCRTEnabled && !TextUtils.isEmpty(rootId) + val notificationIdStr = notificationId.toString() + val groupId = if (isThreadNotification) rootId else channelId + + val notificationsPerServer = loadMap(context) + val notificationsInServer = notificationsPerServer[serverUrl] ?: return + + val notificationsInGroup = notificationsInServer.optJSONObject(groupId) ?: return + val isSummary = notificationsInGroup.optBoolean(notificationIdStr) + notificationsInGroup.remove(notificationIdStr) + + val notificationManager = context.getSystemService(NotificationManager::class.java) + notificationManager.cancel(notificationId) + val statusNotifications = getDeliveredNotifications(context) + var hasMore = false + + for (status in statusNotifications) { + val bundle = status.notification.extras + hasMore = if (isThreadNotification) { + bundle.containsKey("root_id") && bundle.getString("root_id") == rootId + } else { + bundle.containsKey("channel_id") && bundle.getString("channel_id") == channelId + } + if (hasMore) break + } + + if (!hasMore || isSummary) { + notificationsInServer.remove(groupId) + } else { + try { + notificationsInServer.put(groupId, notificationsInGroup) + } catch (e: JSONException) { + e.printStackTrace() + } + } + + notificationsPerServer[serverUrl] = notificationsInServer + saveMap(context, notificationsPerServer) + } + } + + fun removeChannelNotifications(context: Context, serverUrl: String?, channelId: String) { + val notificationManager = NotificationManagerCompat.from(context) + val notificationsPerServer = loadMap(context) + val notificationsInServer = notificationsPerServer[serverUrl] + + if (notificationsInServer != null) { + notificationsInServer.remove(channelId) + notificationsPerServer[serverUrl] = notificationsInServer + saveMap(context, notificationsPerServer) + } + + val notifications = getDeliveredNotifications(context) + for (sbn in notifications) { + val n = sbn.notification + val bundle = n.extras + val cId = bundle.getString("channel_id") + val rootId = bundle.getString("root_id") + val isCRTEnabled = bundle.containsKey("is_crt_enabled") && bundle.getString("is_crt_enabled") == "true" + val skipThreadNotification = isCRTEnabled && !TextUtils.isEmpty(rootId) + if (cId == channelId && !skipThreadNotification) { + notificationManager.cancel(sbn.id) + } + } + } + + fun removeThreadNotifications(context: Context, serverUrl: String?, threadId: String?) { + val notificationManager = NotificationManagerCompat.from(context) + val notificationsPerServer = loadMap(context) + val notificationsInServer = notificationsPerServer[serverUrl] + + val notifications = getDeliveredNotifications(context) + for (sbn in notifications) { + val n = sbn.notification + val bundle = n.extras + val rootId = bundle.getString("root_id") + val postId = bundle.getString("post_id") + if (rootId == threadId) { + notificationManager.cancel(sbn.id) + } + + if (postId == threadId) { + val channelId = bundle.getString("channel_id") + val id = sbn.id + if (notificationsInServer != null && channelId != null) { + val notificationsInChannel = notificationsInServer.optJSONObject(channelId) + if (notificationsInChannel != null) { + notificationsInChannel.remove(id.toString()) + try { + notificationsInServer.put(channelId, notificationsInChannel) + } catch (e: JSONException) { + e.printStackTrace() + } + } + } + notificationManager.cancel(id) + } + } + + if (notificationsInServer != null) { + notificationsInServer.remove(threadId) + notificationsPerServer[serverUrl] = notificationsInServer + saveMap(context, notificationsPerServer) + } + } + + fun removeServerNotifications(context: Context, serverUrl: String) { + val notificationManager = NotificationManagerCompat.from(context) + val notificationsPerServer = loadMap(context) + notificationsPerServer.remove(serverUrl) + saveMap(context, notificationsPerServer) + val notifications = getDeliveredNotifications(context) + for (sbn in notifications) { + val n = sbn.notification + val bundle = n.extras + val url = bundle.getString("server_url") + if (url == serverUrl) { + notificationManager.cancel(sbn.id) + } + } + } + + fun clearChannelOrThreadNotifications(context: Context, notification: Bundle) { + val serverUrl = notification.getString("server_url") + val channelId = notification.getString("channel_id") + val rootId = notification.getString("root_id") + if (channelId != null) { + val isCRTEnabled = notification.containsKey("is_crt_enabled") && notification.getString("is_crt_enabled") == "true" + // rootId is available only when CRT is enabled & clearing the thread + val isClearThread = isCRTEnabled && !TextUtils.isEmpty(rootId) + + if (isClearThread) { + removeThreadNotifications(context, serverUrl, rootId) + } else { + removeChannelNotifications(context, serverUrl, channelId) + } + } + } + + + /** + * Map Structure + * + * { serverUrl: { groupId: { notification1: true, notification2: false } } } + * summary notification has a value of true + * + */ + private fun saveMap(context: Context, inputMap: Map) { + val pSharedPref = context.getSharedPreferences(PUSH_NOTIFICATIONS, Context.MODE_PRIVATE) + if (pSharedPref != null) { + val json = JSONObject(inputMap) + val jsonString = json.toString() + val editor = pSharedPref.edit() + editor.remove(NOTIFICATIONS_IN_GROUP).apply() + editor.putString(NOTIFICATIONS_IN_GROUP, jsonString) + editor.apply() + } + } + + private fun loadMap(context: Context?): MutableMap { + val outputMap: MutableMap = HashMap() + if (context != null) { + val pSharedPref = context.getSharedPreferences(PUSH_NOTIFICATIONS, Context.MODE_PRIVATE) + try { + if (pSharedPref != null) { + val jsonString = pSharedPref.getString(NOTIFICATIONS_IN_GROUP, JSONObject().toString()) + val json = JSONObject(jsonString) + val servers = json.keys() + + while (servers.hasNext()) { + val serverUrl = servers.next() + val notificationGroup = json.getJSONObject(serverUrl) + outputMap[serverUrl] = notificationGroup + } + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + return outputMap + } +} diff --git a/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/Notifications.kt b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/Notifications.kt new file mode 100644 index 00000000000..835ca1c4a5a --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/Notifications.kt @@ -0,0 +1,47 @@ +package com.mattermost.rnutils.helpers + +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext + +class Notifications { + companion object { + private lateinit var context: ReactApplicationContext + + fun setCtx(reactContext: ReactApplicationContext) { + context = reactContext + } + + fun getDeliveredNotifications(promise: Promise?) { + val applicationContext = context.applicationContext + val notifications = NotificationHelper.getDeliveredNotifications(applicationContext) + val result = Arguments.createArray() + for (sbn in notifications) { + val map = Arguments.createMap() + val n = sbn.notification + val bundle = n.extras + val keys = bundle.keySet() + for (key in keys) { + map.putString(key!!, bundle.getString(key)) + } + result.pushMap(map) + } + promise?.resolve(result) + } + + fun removeChannelNotifications(serverUrl: String, channelId: String) { + val applicationContext = context.applicationContext + NotificationHelper.removeChannelNotifications(applicationContext, serverUrl, channelId) + } + + fun removeThreadNotifications(serverUrl: String, threadId: String) { + val applicationContext = context.applicationContext + NotificationHelper.removeThreadNotifications(applicationContext, serverUrl, threadId) + } + + fun removeServerNotifications(serverUrl: String) { + val applicationContext = context.applicationContext + NotificationHelper.removeServerNotifications(applicationContext, serverUrl) + } + } +} diff --git a/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/RealPathUtil.kt b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/RealPathUtil.kt new file mode 100644 index 00000000000..03031ee11ea --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/RealPathUtil.kt @@ -0,0 +1,225 @@ +package com.mattermost.rnutils.helpers + +import android.content.Context +import android.database.Cursor +import android.net.Uri +import android.provider.DocumentsContract +import android.provider.MediaStore +import android.provider.OpenableColumns +import android.text.TextUtils +import android.util.Log +import android.webkit.MimeTypeMap +import java.io.File +import java.io.FileInputStream +import java.io.FileOutputStream +import java.io.IOException + +const val CACHE_DIR_NAME: String = "mmShare" + +object RealPathUtil { + init { + deleteTempFiles(File(CACHE_DIR_NAME)) + } + + fun getRealPathFromURI(context:Context, uri:Uri?): String? { + if (uri == null) { + return null + } + // DocumentProvider + if (DocumentsContract.isDocumentUri(context, uri)) { + // ExternalStorageProvider + if (isExternalStorageDocument(uri)) { + val docId = DocumentsContract.getDocumentId(uri) + val split = docId.split((":").toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() + val type = split[0] + if ("primary".equals(type, ignoreCase = true)) { + return context.getExternalFilesDir(split[1])?.absolutePath + } + } else if (isDownloadsDocument(uri)) { + // DownloadsProvider + val id = DocumentsContract.getDocumentId(uri) + if (!TextUtils.isEmpty(id)) { + if (id.startsWith("raw:")) { + return id.replaceFirst(("raw:").toRegex(), "") + } + + try { + return getPathFromSavingTempFile(context, uri) + } catch (e:NumberFormatException) { + Log.e("ReactNative", "DownloadsProvider unexpected uri $uri") + return null + } + } + } else if (isMediaDocument(uri)) { + // MediaProvider + val docId = DocumentsContract.getDocumentId(uri) + val split = docId.split((":").toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() + val type = split[0] + var contentUri: Uri? = null + when (type) { + "image" -> { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI + } + "video" -> { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI + } + "audio" -> { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + } + } + val selectionArgs = arrayOf(split[1]) + return contentUri?.let { getDataColumn(context, it, selectionArgs) } + } + } + if ("content".equals(uri.scheme, ignoreCase = true)) { + // MediaStore (and general) + if (isGooglePhotosUri(uri)) { + return uri.lastPathSegment + } + // Try save to tmp file, and return tmp file path + return getPathFromSavingTempFile(context, uri) + } + else if ("file".equals(uri.scheme, ignoreCase = true)) { + return uri.path + } + return null + } + + private fun getPathFromSavingTempFile(context:Context, uri:Uri): String? { + val tmpFile:File + var fileName: String? = null + // Try and get the filename from the Uri + try + { + val returnCursor = context.contentResolver.query(uri, null, null, null, null) + val nameIndex = returnCursor?.getColumnIndex(OpenableColumns.DISPLAY_NAME) + returnCursor?.moveToFirst() + fileName = sanitizeFilename(nameIndex?.let { returnCursor?.getString(it) }) + } catch (e:Exception) { + // just continue to get the filename with the last segment of the path + } + + try + { + if (fileName == null) { + fileName = sanitizeFilename(uri.lastPathSegment.toString().trim()) + } + val cacheDir = File(context.cacheDir, CACHE_DIR_NAME) + if (!cacheDir.exists()) { + cacheDir.mkdirs() + } + tmpFile = File(cacheDir, fileName!!) + tmpFile.createNewFile() + val pfd = context.contentResolver.openFileDescriptor(uri, "r") + val src = FileInputStream(pfd?.fileDescriptor).channel + val dst = FileOutputStream(tmpFile).channel + dst.transferFrom(src, 0, src.size()) + src.close() + dst.close() + pfd?.close() + } + catch (ex:IOException) { + return null + } + return tmpFile.absolutePath + } + + private fun sanitizeFilename(filename: String?): String? { + if (filename == null) { + return null; + } + + val f = File(filename); + return f.name; + } + + private fun getDataColumn(context:Context, uri:Uri, selectionArgs:Array): String? { + var cursor: Cursor? = null + val column = "_data" + val selection = "_id=?" + val projection = arrayOf(column) + try + { + cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) + if (cursor != null && cursor.moveToFirst()) { + val index = cursor.getColumnIndexOrThrow(column) + return cursor.getString(index) + } + } + finally + { + cursor?.close() + } + + return null + } + + private fun isExternalStorageDocument(uri:Uri):Boolean { + return "com.android.externalstorage.documents" == uri.authority + } + + private fun isDownloadsDocument(uri:Uri):Boolean { + return "com.android.providers.downloads.documents" == uri.authority + } + + private fun isMediaDocument(uri:Uri):Boolean { + return "com.android.providers.media.documents" == uri.authority + } + + private fun isGooglePhotosUri(uri:Uri):Boolean { + return "com.google.android.apps.photos.content" == uri.authority + } + + private fun getExtension(uri: String?): String? { + if (uri == null) { + return null + } + + val dot = uri.lastIndexOf(".") + return if (dot >= 0) + { + uri.substring(dot) + } else { + // No extension. + "" + } + } + + fun getMimeType(file: File): String? { + val extension = getExtension(file.name) + if (extension?.length!! > 0) { + return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.substring(1)) + } + + return "application/octet-stream" + } + + fun getMimeType(filePath: String): String? { + val file = File(filePath) + return getMimeType(file) + } + + private fun deleteTempFiles(dir:File) { + try + { + if (dir.isDirectory) { + deleteRecursive(dir) + } + } + catch (e:Exception) { + // do nothing + } + } + + private fun deleteRecursive(fileOrDirectory:File) { + if (fileOrDirectory.isDirectory) { + val files = fileOrDirectory.listFiles() + if (files?.size!! > 0) { + for (child in files) { + deleteRecursive(child) + } + } + fileOrDirectory.delete() + } + } +} diff --git a/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/SaveDataTask.kt b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/SaveDataTask.kt new file mode 100644 index 00000000000..66861eb2550 --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/SaveDataTask.kt @@ -0,0 +1,146 @@ +package com.mattermost.rnutils.helpers + +import android.app.Activity +import android.content.Intent +import android.net.Uri +import android.webkit.MimeTypeMap +import androidx.core.content.FileProvider +import com.facebook.react.bridge.ActivityEventListener +import com.facebook.react.bridge.BaseActivityEventListener +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.mattermost.rnutils.enums.Events +import java.io.File +import java.io.FileInputStream +import java.io.FileOutputStream +import java.lang.ref.WeakReference +import java.util.Locale +import java.util.Objects +import java.util.concurrent.Executors + +open class SaveDataTask(val reactContext: ReactApplicationContext) { + private var mPickerPromise: Promise? = null + private var fileContent: String? = null + + private val weakContext = WeakReference(reactContext.applicationContext) + private val myExecutor = Executors.newSingleThreadExecutor() + + companion object { + const val SAVE_REQUEST: Int = 38641 + } + + init { + var mActivityEventListener: ActivityEventListener = object : BaseActivityEventListener() { + override fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, intent: Intent?) { + if (requestCode == SAVE_REQUEST) { + if (resultCode == Activity.RESULT_CANCELED) { + mPickerPromise?.reject(Events.SAVE_ERROR_EVENT.event, "Save operation cancelled") + } else if (resultCode == Activity.RESULT_OK) { + val uri = intent!!.data + if (uri == null) { + mPickerPromise?.reject(Events.SAVE_ERROR_EVENT.event, "No data found") + } else { + try { + fileContent?.let { save(it, uri) } + mPickerPromise?.resolve(uri.toString()) + } catch (e: java.lang.Exception) { + mPickerPromise?.reject(Events.SAVE_ERROR_EVENT.event, e.message) + } + } + } + + mPickerPromise = null + } + } + } + } + + + private fun save(fromFile: String, toFile: Uri) { + myExecutor.execute { + try { + val pfd = weakContext.get()?.contentResolver?.openFileDescriptor(toFile, "w") + val input = File(fromFile) + FileInputStream(input).use { fileInputStream -> + if (pfd != null) { + FileOutputStream(pfd.fileDescriptor).use { fileOutputStream -> + val source = fileInputStream.channel + val dest = fileOutputStream.channel + dest.transferFrom(source, 0, source.size()) + source.close() + dest.close() + } + } + } + pfd?.close() + } catch (e: Exception) { + e.printStackTrace() + } + } + } + + fun saveFile(filePath: String?, promise: Promise?) { + val contentUri: Uri? + var filename = "" + + if (filePath?.startsWith("content://") == true) { + contentUri = Uri.parse(filePath) + } else { + val newFile = filePath?.let { File(it) } + filename = newFile?.name ?: "" + val currentActivity: Activity? = reactContext.currentActivity + if (currentActivity == null) { + promise?.reject(Events.SAVE_ERROR_EVENT.event, "Activity doesn't exist") + return + } + + try { + val packageName = currentActivity.packageName + val authority = "$packageName.provider" + contentUri = newFile?.let { FileProvider.getUriForFile(currentActivity, authority, it) } + } catch (e: IllegalArgumentException) { + promise?.reject(Events.SAVE_ERROR_EVENT.event, e.message) + return + } + } + + if (contentUri == null) { + promise?.reject(Events.SAVE_ERROR_EVENT.event, "Invalid file") + return + } + + val extension = MimeTypeMap.getFileExtensionFromUrl(filePath).lowercase(Locale.getDefault()) + var mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) + if (mimeType == null) { + mimeType = filePath?.let { RealPathUtil.getMimeType(it) } + } + + val intent = Intent() + intent.setAction(Intent.ACTION_CREATE_DOCUMENT) + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + intent.addCategory(Intent.CATEGORY_OPENABLE) + intent.setType(mimeType) + intent.putExtra(Intent.EXTRA_TITLE, filename) + + val activity = reactContext.currentActivity + val pm = Objects.requireNonNull(activity).packageManager + if (intent.resolveActivity(pm) != null) { + try { + activity?.startActivityForResult(intent, SAVE_REQUEST) + mPickerPromise = promise + fileContent = filePath + } catch (e: Exception) { + promise?.reject(Events.SAVE_ERROR_EVENT.event, e.message) + } + } else { + try { + if (mimeType == null) { + throw Exception("It wasn't possible to detect the type of the file") + } + throw Exception("No app associated with this mime type") + } catch (e: Exception) { + promise?.reject(Events.SAVE_ERROR_EVENT.event, e.message) + } + } + } +} diff --git a/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/SplitView.kt b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/SplitView.kt new file mode 100644 index 00000000000..317b9a4a983 --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/main/java/com/mattermost/rnutils/helpers/SplitView.kt @@ -0,0 +1,83 @@ +package com.mattermost.rnutils.helpers + +import android.content.Context +import android.content.res.Configuration +import android.telephony.TelephonyManager +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.WritableMap +import com.mattermost.rnutils.RNUtilsModuleImpl +import com.mattermost.rnutils.enums.Events + +class SplitView { + companion object { + private var context: ReactApplicationContext? = null + + fun setCtx(reactContext: ReactApplicationContext) { + context = reactContext + } + + private fun isTablet(): Boolean { + if (context == null) { + return false + } + val configuration = context!!.resources.configuration + val screenLayout = configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK + val smallestScreenWidthDp = configuration.smallestScreenWidthDp + val telephonyManager = context!!.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager + + val isLargeScreen = screenLayout >= Configuration.SCREENLAYOUT_SIZE_LARGE + val isSmallestWidthLarge = smallestScreenWidthDp >= 600 + val isNotPhone = telephonyManager.phoneType == TelephonyManager.PHONE_TYPE_NONE + + return isLargeScreen || isSmallestWidthLarge || isNotPhone + } + + fun setDeviceFolded() { + val map = getSplitViewResults(FoldableObserver.getInstance()?.isDeviceFolded == true) + RNUtilsModuleImpl.sendJSEvent(Events.SPLIT_VIEW_CHANGED.event, map) + } + + private fun getSplitViewResults(folded: Boolean): WritableMap? { + if (context?.currentActivity != null) { + val map = Arguments.createMap() + var isSplitView = folded; + if (context?.currentActivity?.isInMultiWindowMode == true) { + isSplitView = FoldableObserver.getInstance()?.isCompactView() == true + } + map.putBoolean("isSplit", isSplitView) + map.putBoolean("isTablet", isTablet()) + return map + } + + return null + } + + fun isRunningInSplitView(): WritableMap? { + return getSplitViewResults(FoldableObserver.getInstance()?.isDeviceFolded == true) + } + + fun getWindowDimensions(): WritableMap? { + if (context?.currentActivity != null) { + val map = Arguments.createMap() + val bounds = FoldableObserver.getInstance()?.getWindowDimensions() + if (bounds != null) { + map.putInt("width", bounds.width()) + map.putInt("height", bounds.height()) + } else { + map.putInt("width", 0) + map.putInt("height", 0) + } + + return map + } + + return null + } + + fun emitDimensionsChanged() { + val map = getWindowDimensions() + RNUtilsModuleImpl.sendJSEvent(Events.DIMENSIONS_CHANGED.event, map) + } + } +} diff --git a/libraries/@mattermost/rnutils/android/src/newarch/RNUtilsModule.kt b/libraries/@mattermost/rnutils/android/src/newarch/RNUtilsModule.kt new file mode 100644 index 00000000000..a5f8c369c26 --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/newarch/RNUtilsModule.kt @@ -0,0 +1,70 @@ +package com.mattermost.rnutils + +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.WritableMap + +class RNUtilsModule(val reactContext: ReactApplicationContext) : NativeRNUtilsSpec(reactContext) { + private var implementation: RNUtilsModuleImpl = RNUtilsModuleImpl(reactContext) + + override fun getTypedExportedConstants(): MutableMap = implementation.getTypedExportedConstants() + + override fun addListener(eventType: String?) { + // Keep: Required for RN built in Event Emitter Calls + } + + override fun removeListeners(count: Double) { + // Keep: Required for RN built in Event Emitter Calls + } + + override fun getRealFilePath(filePath: String?, promise: Promise?) { + implementation.getRealFilePath(filePath, promise) + } + + override fun saveFile(filePath: String?, promise: Promise?) { + implementation.saveFile(filePath, promise) + } + + override fun isRunningInSplitView(): WritableMap? = implementation.isRunningInSplitView() + + override fun getWindowDimensions(): WritableMap? = implementation.getWindowDimensions() + + override fun setHasRegisteredLoad() = implementation.setHasRegisteredLoad() + override fun getHasRegisteredLoad(): WritableMap = implementation.getHasRegisteredLoad() + + override fun unlockOrientation() { + implementation.unlockOrientation() + } + + override fun lockPortrait() { + implementation.lockPortrait() + } + + override fun deleteDatabaseDirectory(databaseName: String?, shouldRemoveDirectory: Boolean): WritableMap { + return implementation.deleteDatabaseDirectory(databaseName, shouldRemoveDirectory) + } + + override fun renameDatabase(databaseName: String?, newDatabaseName: String?): WritableMap { + return implementation.renameDatabase(databaseName, newDatabaseName) + } + + override fun deleteEntitiesFile(): Boolean { + return implementation.deleteEntitiesFile() + } + + override fun getDeliveredNotifications(promise: Promise?) { + implementation.getDeliveredNotifications(promise) + } + + override fun removeChannelNotifications(serverUrl: String?, channelId: String?) { + implementation.removeChannelNotifications(serverUrl, channelId) + } + + override fun removeThreadNotifications(serverUrl: String?, threadId: String?) { + implementation.removeThreadNotifications(serverUrl, threadId) + } + + override fun removeServerNotifications(serverUrl: String?) { + implementation.removeServerNotifications(serverUrl) + } +} diff --git a/libraries/@mattermost/rnutils/android/src/oldarch/RNUtilsModule.kt b/libraries/@mattermost/rnutils/android/src/oldarch/RNUtilsModule.kt new file mode 100644 index 00000000000..e28b0ba95b1 --- /dev/null +++ b/libraries/@mattermost/rnutils/android/src/oldarch/RNUtilsModule.kt @@ -0,0 +1,101 @@ +package com.mattermost.rnutils + +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.bridge.WritableMap + +class RNUtilsModule(context: ReactApplicationContext) : + ReactContextBaseJavaModule(context) { + private var implementation: RNUtilsModuleImpl = RNUtilsModuleImpl(context) + + override fun getName(): String = RNUtilsModuleImpl.NAME + + override fun getConstants(): MutableMap = implementation.getTypedExportedConstants() + + @ReactMethod + fun addListener(eventType: String?) { + // Keep: Required for RN built in Event Emitter Calls + } + + @ReactMethod + fun removeListeners(count: Double) { + // Keep: Required for RN built in Event Emitter Calls + } + + @ReactMethod + fun getRealFilePath(filePath: String?, promise: Promise?) { + implementation.getRealFilePath(filePath, promise) + } + + @ReactMethod + fun saveFile(filePath: String?, promise: Promise?) { + implementation.saveFile(filePath, promise) + } + + @ReactMethod(isBlockingSynchronousMethod = true) + fun isRunningInSplitView(): WritableMap? { + return implementation.isRunningInSplitView() + } + + @ReactMethod(isBlockingSynchronousMethod = true) + fun getWindowDimensions(): WritableMap? { + return implementation.getWindowDimensions() + } + + @ReactMethod + fun setHasRegisteredLoad() { + implementation.setHasRegisteredLoad() + } + + @ReactMethod(isBlockingSynchronousMethod = true) + fun getHasRegisteredLoad(): WritableMap { + return implementation.getHasRegisteredLoad() + } + + @ReactMethod + fun unlockOrientation() { + implementation.unlockOrientation() + } + + @ReactMethod + fun lockPortrait() { + implementation.lockPortrait() + } + + @ReactMethod(isBlockingSynchronousMethod = true) + fun deleteDatabaseDirectory(databaseName: String?, shouldRemoveDirectory: Boolean): WritableMap { + return implementation.deleteDatabaseDirectory(databaseName, shouldRemoveDirectory) + } + + @ReactMethod(isBlockingSynchronousMethod = true) + fun renameDatabase(databaseName: String?, newDatabaseName: String?): WritableMap { + return implementation.renameDatabase(databaseName, newDatabaseName) + } + + @ReactMethod(isBlockingSynchronousMethod = true) + fun deleteEntitiesFile(): Boolean { + return implementation.deleteEntitiesFile() + } + + @ReactMethod + fun getDeliveredNotifications(promise: Promise?) { + implementation.getDeliveredNotifications(promise) + } + + @ReactMethod + fun removeChannelNotifications(serverUrl: String?, channelId: String?) { + implementation.removeChannelNotifications(serverUrl, channelId) + } + + @ReactMethod + fun removeThreadNotifications(serverUrl: String?, threadId: String?) { + implementation.removeThreadNotifications(serverUrl, threadId) + } + + @ReactMethod + fun removeServerNotifications(serverUrl: String?) { + implementation.removeServerNotifications(serverUrl) + } +} diff --git a/libraries/@mattermost/rnutils/ios/Extensions/RNUtilsWrapper+Events.swift b/libraries/@mattermost/rnutils/ios/Extensions/RNUtilsWrapper+Events.swift new file mode 100644 index 00000000000..9d50deac398 --- /dev/null +++ b/libraries/@mattermost/rnutils/ios/Extensions/RNUtilsWrapper+Events.swift @@ -0,0 +1,13 @@ +import Foundation + +extension RNUtilsWrapper { + enum Event: String, CaseIterable { + case SplitViewChanged + case DimensionsChanged + } + + @objc + public static var supportedEvents: [String] { + return Event.allCases.map(\.rawValue) + } +} diff --git a/libraries/@mattermost/rnutils/ios/Managers/NotificationManager.swift b/libraries/@mattermost/rnutils/ios/Managers/NotificationManager.swift new file mode 100644 index 00000000000..716f8f89e49 --- /dev/null +++ b/libraries/@mattermost/rnutils/ios/Managers/NotificationManager.swift @@ -0,0 +1,117 @@ +import Foundation +import UserNotifications +import UIKit +import React + +@objc public class NotificationManager: NSObject { + @objc public static let shared = NotificationManager() + private let notificationCenter = UNUserNotificationCenter.current() + + private override init() {} + + func RCTNullIfNil(_ value: T?) -> Any { + return value ?? NSNull() + } + + func RCTNilIfNull(_ value: T?) -> T? { + guard let t = value else { return nil } + return t as AnyObject === NSNull() ? nil : t + } + + func UNNotificationPayload(notification: UNNotification) -> NSDictionary { + var formattedNotification = NSMutableDictionary() + let content = notification.request.content + + formattedNotification["identifier"] = notification.request.identifier + + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" + let dateString = formatter.string(from: notification.date) + formattedNotification["date"] = dateString + + formattedNotification["title"] = RCTNullIfNil(content.title) + formattedNotification["body"] = RCTNullIfNil(content.body) + formattedNotification["category"] = RCTNullIfNil(content.categoryIdentifier) + formattedNotification["thread"] = RCTNullIfNil(content.threadIdentifier) + + if let userInfo = RCTNullIfNil(RCTJSONClean(content.userInfo)) as? [AnyHashable: Any] { + formattedNotification.addEntries(from: userInfo) + } + + return formattedNotification + } + + + @objc public func getDeliveredNotifications(completionHandler: @escaping ([NSDictionary]) -> Void) { + notificationCenter.getDeliveredNotifications { [weak self] notifications in + var formattedNotifications: [NSDictionary] = [] + for notification in notifications { + if let wkSelf = self { + formattedNotifications.append(wkSelf.UNNotificationPayload(notification: notification)) + } + } + completionHandler(formattedNotifications) + } + } + + @objc public func removeChannelNotifications(serverUrl: String, channelId: String) { + notificationCenter.getDeliveredNotifications(completionHandler: {notifications in + var notificationIds = [String]() + + for notification in notifications { + let request = notification.request + let content = request.content + let identifier = request.identifier + let cId = content.userInfo["channel_id"] as? String + let rootId = content.userInfo["root_id"] as? String ?? "" + let crtEnabled = content.userInfo["is_crt_enabled"] as? Bool ?? false + let skipThreadNotification = !rootId.isEmpty && crtEnabled + + if cId == channelId && !skipThreadNotification { + notificationIds.append(identifier) + } + } + + self.notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationIds) + }) + } + + @objc public func removeThreadNotifications(serverUrl: String, threadId: String) { + notificationCenter.getDeliveredNotifications(completionHandler: {notifications in + var notificationIds = [String]() + + for notification in notifications { + let request = notification.request + let content = request.content + let identifier = request.identifier + let postId = content.userInfo["post_id"] as? String + let rootId = content.userInfo["root_id"] as? String + + if rootId == threadId || postId == threadId { + notificationIds.append(identifier) + } + } + + self.notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationIds) + }) + } + + @objc public func removeServerNotifications(serverUrl: String) { + notificationCenter.getDeliveredNotifications(completionHandler: {notifications in + var notificationIds = [String]() + + for notification in notifications { + let request = notification.request + let content = request.content + let identifier = request.identifier + let url = content.userInfo["server_url"] as? String + + if url == serverUrl { + notificationIds.append(identifier) + } + } + + self.notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationIds) + }) + } +} diff --git a/libraries/@mattermost/rnutils/ios/Managers/OrientationManager.swift b/libraries/@mattermost/rnutils/ios/Managers/OrientationManager.swift new file mode 100644 index 00000000000..5cef5edeb5d --- /dev/null +++ b/libraries/@mattermost/rnutils/ios/Managers/OrientationManager.swift @@ -0,0 +1,16 @@ +import Foundation + +public class OrientationManager: NSObject { + @objc public static let shared = OrientationManager() + @objc public weak var delegate: OrientationLockable? + + private override init() {} + + @objc public func lockOrientation() { + delegate?.orientationLock = .portrait + } + + @objc public func unlockOrientation() { + delegate?.orientationLock = .allButUpsideDown + } +} diff --git a/libraries/@mattermost/rnutils/ios/Protocols/OrientationLockable.swift b/libraries/@mattermost/rnutils/ios/Protocols/OrientationLockable.swift new file mode 100644 index 00000000000..392ff2e5649 --- /dev/null +++ b/libraries/@mattermost/rnutils/ios/Protocols/OrientationLockable.swift @@ -0,0 +1,5 @@ +import UIKit + +@objc public protocol OrientationLockable: AnyObject { + var orientationLock: UIInterfaceOrientationMask {get set} +} diff --git a/libraries/@mattermost/rnutils/ios/Protocols/RNUtilsDelegate.swift b/libraries/@mattermost/rnutils/ios/Protocols/RNUtilsDelegate.swift new file mode 100644 index 00000000000..c1868b21c2e --- /dev/null +++ b/libraries/@mattermost/rnutils/ios/Protocols/RNUtilsDelegate.swift @@ -0,0 +1,5 @@ +import Foundation + +@objc public protocol RNUtilsDelegate { + func sendEvent(name: String, result: Dictionary?) +} diff --git a/libraries/@mattermost/rnutils/ios/RNUtils.h b/libraries/@mattermost/rnutils/ios/RNUtils.h new file mode 100644 index 00000000000..ffadc260280 --- /dev/null +++ b/libraries/@mattermost/rnutils/ios/RNUtils.h @@ -0,0 +1,15 @@ +#import "Foundation/Foundation.h" +#import +#import + +#ifdef RCT_NEW_ARCH_ENABLED +#import "RNUtilsSpec.h" + +@interface RNUtils : RCTEventEmitter +#else +#import + +@interface RNUtils : RCTEventEmitter +#endif + +@end diff --git a/libraries/@mattermost/rnutils/ios/RNUtils.mm b/libraries/@mattermost/rnutils/ios/RNUtils.mm new file mode 100644 index 00000000000..489d5f56756 --- /dev/null +++ b/libraries/@mattermost/rnutils/ios/RNUtils.mm @@ -0,0 +1,227 @@ +#import "RNUtils.h" + +#ifdef RCT_NEW_ARCH_ENABLED +#import "RNUtilsSpec.h" + +using namespace facebook::react; +using namespace JS::NativeRNUtils; +#endif + +#if __has_include("mattermost_rnutils-Swift.h") +#import +#else +#import +#endif + +@interface RNUtils() +@end + +@implementation RNUtils { + RNUtilsWrapper *wrapper; +} + +-(instancetype)init { + self = [super init]; + if (self) { + wrapper = [RNUtilsWrapper new]; + wrapper.delegate = self; + [wrapper captureEvents]; + } + return self; +} + +#pragma protocol + +- (void)sendEventWithName:(NSString * _Nonnull)name result:(NSDictionary * _Nullable)result { + [self sendEventWithName:name body:result]; +} + +- (NSArray *)supportedEvents { + return [RNUtilsWrapper supportedEvents]; +} + +#pragma overrides ++ (BOOL)requiresMainQueueSetup { + return NO; +} + +- (NSDictionary *)constantsToExport { + return @{ + @"appGroupIdentifier": [wrapper getAppGroupId], + @"appGroupSharedDirectory" : [wrapper appGroupSharedDirectory] + }; +} + +RCT_EXPORT_MODULE(RNUtils) + +RCT_REMAP_BLOCKING_SYNCHRONOUS_METHOD(deleteDatabaseDirectory, NSDictionary*, databaseName:(NSString *)databaseName + shouldRemoveDirectory:(BOOL)shouldRemoveDirectory) { + return [wrapper deleteDatabaseDirectoryWithDatabaseName:databaseName shouldRemoveDirectory:shouldRemoveDirectory]; +} + +RCT_REMAP_BLOCKING_SYNCHRONOUS_METHOD(renameDatabase, NSDictionary*, dataabaseName:(NSString *)databaseName + newDatabaseName:(NSString *)newDatabaseName) { + return [wrapper renameDatabaseWithDatabaseName:databaseName newDatabaseName:newDatabaseName]; +} + +RCT_REMAP_BLOCKING_SYNCHRONOUS_METHOD(deleteEntitiesFile, NSNumber*, deleteEntities) { + return [wrapper deleteEntitiesFile]; +} + +RCT_REMAP_BLOCKING_SYNCHRONOUS_METHOD(isRunningInSplitView, NSDictionary*, isSplitView) { + return [wrapper isRunningInSplitView]; +} + +RCT_REMAP_BLOCKING_SYNCHRONOUS_METHOD(getWindowDimensions, NSDictionary*, windowDimensions) { + return [wrapper getWindowDimensions]; +} + +RCT_REMAP_BLOCKING_SYNCHRONOUS_METHOD(getHasRegisteredLoad, NSDictionary*, getLoad) { + return [wrapper getHasRegisteredLoad]; +} + +RCT_REMAP_METHOD(setHasRegisteredLoad, setLoad) { + [wrapper setHasRegisteredLoad]; +} + +RCT_REMAP_METHOD(unlockOrientation, unlock) { + [wrapper unlockOrientation]; +} + +RCT_REMAP_METHOD(lockPortrait, portrait) { + [wrapper lockOrientation]; +} + +RCT_EXPORT_METHOD(getDeliveredNotifications:(RCTPromiseResolveBlock)resolve + withRejecter:(RCTPromiseRejectBlock)reject) { + [self getNotifications:resolve]; +} + +RCT_REMAP_METHOD(removeChannelNotifications, serverUrl:(NSString *)serverUrl + channeId:(NSString *)channelId) { + [self removeChannelNotifications:serverUrl channelId:channelId]; +} + +RCT_REMAP_METHOD(removeThreadNotifications, server:(NSString *)serverUrl + threadId:(NSString *)threadId) { + [self removeThreadNotifications:serverUrl threadId:threadId]; +} + +RCT_REMAP_METHOD(removeServerNotifications, serverUrl:(NSString *)serverUrl) { + [self removeServerNotifications:serverUrl]; +} + +RCT_EXPORT_METHOD(getRealFilePath:(NSString *)filePath + withResolver:(RCTPromiseResolveBlock)resolve + withRejecter:(RCTPromiseRejectBlock)reject) { + [self getRealFilePath:filePath resolve:resolve reject:reject]; +} + +RCT_EXPORT_METHOD(saveFile:(NSString *)filePath + withResolver:(RCTPromiseResolveBlock)resolve + withRejecter:(RCTPromiseRejectBlock)reject) { + [self saveFile:filePath resolve:resolve reject:reject]; +} + +// Don't compile this code when we build for the old architecture. +#ifdef RCT_NEW_ARCH_ENABLED +- (std::shared_ptr)getTurboModule: + (const ObjCTurboModule::InitParams &)params +{ + return std::make_shared(params); +} + +- (ModuleConstants)getConstants { + NSDictionary *appGroup = [wrapper appGroupSharedDirectory]; + NSString *sharedDirectory = appGroup[@"sharedDirectory"]; + NSString *databasePath = appGroup[@"databasePath"]; + NSString *appGroupIdentifier = [wrapper getAppGroupId]; + + ConstantsAppGroupSharedDirectory::Builder::Input sharedDirectoryInput = { + sharedDirectory, + databasePath + }; + + ConstantsAppGroupSharedDirectory::Builder sharedDirectoryBuilder(sharedDirectoryInput); + Constants::Builder::Input constantsInput = { + appGroupIdentifier, + sharedDirectoryBuilder + }; + + Constants::Builder constantsBuilder(constantsInput); + + return [_RCTTypedModuleConstants newWithUnsafeDictionary:constantsBuilder.buildUnsafeRawValue()]; +} +#endif + +- (NSDictionary *)deleteDatabaseDirectory:(NSString *)databaseName shouldRemoveDirectory:(BOOL)shouldRemoveDirectory { + return [wrapper deleteDatabaseDirectoryWithDatabaseName:databaseName shouldRemoveDirectory:shouldRemoveDirectory]; +} + +- (NSDictionary *)renameDatabase:(NSString *)databaseName newDatabaseName:(NSString *)newDatabaseName { + return [wrapper renameDatabaseWithDatabaseName:databaseName newDatabaseName:newDatabaseName]; +} + +- (NSNumber *)deleteEntitiesFile { + return [wrapper deleteEntitiesFile]; +} + +- (NSDictionary *)isRunningInSplitView { + return [wrapper isRunningInSplitView]; +} + +- (NSDictionary *)getWindowDimensions { + return [wrapper getWindowDimensions]; +} + +- (NSDictionary *)getHasRegisteredLoad { + return [wrapper getHasRegisteredLoad]; +} + +- (void)setHasRegisteredLoad { + [wrapper setHasRegisteredLoad]; +} + +- (void)lockPortrait { + [wrapper lockOrientation]; +} + +- (void)unlockOrientation { + [wrapper unlockOrientation]; +} + + +- (void)getDeliveredNotifications:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { + [self getNotifications:resolve]; +} + + +- (void)removeChannelNotifications:(NSString *)serverUrl channelId:(NSString *)channelId { + [[NotificationManager shared] removeChannelNotificationsWithServerUrl:serverUrl channelId:channelId]; +} + +- (void)removeThreadNotifications:(NSString *)serverUrl threadId:(NSString *)threadId { + [[NotificationManager shared] removeThreadNotificationsWithServerUrl:serverUrl threadId:threadId]; +} + +- (void)removeServerNotifications:(NSString *)serverUrl { + [[NotificationManager shared] removeServerNotificationsWithServerUrl:serverUrl]; +} + +- (void)getRealFilePath:(NSString *)filePath resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { + resolve(@""); +} + +- (void)saveFile:(NSString *)filePath resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { + resolve(@""); +} + +#pragma helpers +-(void)getNotifications:(RCTPromiseResolveBlock)resolve { + [[NotificationManager shared] getDeliveredNotificationsWithCompletionHandler:^(NSArray * _Nonnull notifications) { + resolve(notifications); + }]; +} + + +@end diff --git a/libraries/@mattermost/rnutils/ios/RNUtilsWrapper.swift b/libraries/@mattermost/rnutils/ios/RNUtilsWrapper.swift new file mode 100644 index 00000000000..1851eda679e --- /dev/null +++ b/libraries/@mattermost/rnutils/ios/RNUtilsWrapper.swift @@ -0,0 +1,282 @@ +import Foundation +import React + +@objc public class RNUtilsWrapper: NSObject { + @objc public weak var delegate: RNUtilsDelegate? = nil + @objc private var hasRegisteredLoad = false + + deinit { + DispatchQueue.main.async { + guard let w = UIApplication.shared.delegate?.window, let window = w else { return } + window.removeObserver(self, forKeyPath: "frame") + } + } + + func getSharedDirectory() -> URL? { + let fileManager = FileManager.default + return fileManager.containerURL(forSecurityApplicationGroupIdentifier: getAppGroupId()) + } + + func getDatabasePath() -> String { + guard let sharedDirectory = getSharedDirectory() else { + return "" + } + return sharedDirectory.appendingPathComponent("databases").path + } + + func getWindowSize() -> (CGSize?, CGSize?) { + guard let w = UIApplication.shared.delegate?.window, let window = w else { return (nil, nil) } + return (window.screen.bounds.size, window.frame.size) + } + + func isRunningInFullScreen() -> Bool { + guard let w = UIApplication.shared.delegate?.window, let window = w else { return false } + let screenSize = window.screen.bounds.size.width + let frameSize = window.frame.size.width + let shouldBeConsideredFullScreen = frameSize >= (screenSize * 0.6) + return shouldBeConsideredFullScreen + } + + func isRunningInFullScreen(screen: CGSize?, frame: CGSize?) -> Bool { + guard let screenSize = screen?.width, + let frameSize = frame?.width else {return false} + let shouldBeConsideredFullScreen = frameSize >= (screenSize * 0.6) + return shouldBeConsideredFullScreen + } + + @objc public func captureEvents() { + DispatchQueue.main.async { + guard let w = UIApplication.shared.delegate?.window, let window = w else { return } + window.addObserver(self, forKeyPath: "frame", options: .new, context: nil) + } + } + + override public func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { + if keyPath == "frame" { + let (screen, frame) = getWindowSize() + guard let screen = screen, let frame = frame else {return} + isSplitView(screen: screen, frame: frame) + + delegate?.sendEvent(name: "DimensionsChanged", result: [ + "width": frame.width, + "height": frame.height + ]) + } + } + + @objc func isSplitView(screen: CGSize, frame: CGSize) { + if UIDevice.current.userInterfaceIdiom == .pad { + delegate?.sendEvent(name: "SplitViewChanged", result: [ + "isSplit": !isRunningInFullScreen(screen: screen, frame: frame), + "isTablet": UIDevice.current.userInterfaceIdiom == .pad, + ]) + } + } + + @objc public func getAppGroupId() -> String { + let bundle = Bundle.main + guard let appGroupId = bundle.object(forInfoDictionaryKey: "AppGroupIdentifier") as? String else { + return "" + } + + return appGroupId + } + + @objc public func appGroupSharedDirectory() -> Dictionary { + let fileManager = FileManager.default + let sharedDirectory = fileManager.containerURL(forSecurityApplicationGroupIdentifier: getAppGroupId()) + let databasePath = sharedDirectory?.appendingPathComponent("databases") + var results = Dictionary() + + guard let dbPath = databasePath, + let shared = sharedDirectory else { + results["sharedDirectory"] = "" + results["databasePath"] = "" + return results + } + + try? fileManager.createDirectory(at: dbPath, withIntermediateDirectories: true, attributes: nil) + + results["sharedDirectory"] = shared.path + results["databasePath"] = dbPath.path + return results + } + + @objc public func deleteDatabaseDirectory(databaseName: String?, shouldRemoveDirectory: Bool) -> Dictionary { + let appGroupDatabaseDir = getDatabasePath() + guard !appGroupDatabaseDir.isEmpty else { + return [ + "error": "No app group directory found", + "success": false + ] + } + + guard let name = databaseName, !name.isEmpty else { + return [ + "error": "database name should not be null or empty", + "success": false + ] + } + + let databaseFile = "\(appGroupDatabaseDir)/\(name).db" + let databaseDirOrFile = shouldRemoveDirectory ? appGroupDatabaseDir : databaseFile + let fileManager = FileManager.default + + let walFile = "\(databaseFile)-wal" + if !shouldRemoveDirectory && fileManager.fileExists(atPath: walFile) { + try? fileManager.removeItem(atPath: walFile) + } + + let shmFile = "\(databaseFile)-shm" + if !shouldRemoveDirectory && fileManager.fileExists(atPath: shmFile) { + try? fileManager.removeItem(atPath: shmFile) + } + + do { + try fileManager.removeItem(atPath: databaseDirOrFile) + return [ + "error": "", + "success": true + ] + } catch { + return [ + "error": error.localizedDescription, + "success": false + ] + } + } + + @objc public func renameDatabase(databaseName: String?, newDatabaseName: String?) -> Dictionary { + guard let appGroupDir = getSharedDirectory() else { + return [ + "error": "No app group directory found", + "success": false + ] + } + + guard let name = databaseName, + let newName = newDatabaseName, + !name.isEmpty, !newName.isEmpty else { + return [ + "error": "database name and the new database name should not be null or empty", + "success": false + ] + } + + let fileManager = FileManager.default + let databaseDir = "\(appGroupDir.path)/\(name).db" + let walFile = "\(databaseDir)-wal" + let shmFile = "\(databaseDir)-shm" + if !fileManager.fileExists(atPath: databaseDir) { + return [ + "error": "database file is not does not exists", + "success": false + ] + } + + let newDatabaseDir = "\(appGroupDir.path)/\(newName).db" + let destinationFileExists = fileManager.fileExists(atPath: newDatabaseDir) + let dstWal = "\(newDatabaseDir)-wal" + let dstShm = "\(newDatabaseDir)-shm" + + if !destinationFileExists && fileManager.fileExists(atPath: walFile) { + try? fileManager.moveItem(atPath: walFile, toPath: dstWal) + } + + if !destinationFileExists && fileManager.fileExists(atPath: shmFile) { + try? fileManager.moveItem(atPath: shmFile, toPath: dstShm) + } + + do { + try fileManager.moveItem(atPath: databaseDir, toPath: newDatabaseDir) + return [ + "error": "", + "success": true + ] + } catch { + return [ + "error": error.localizedDescription, + "success": false + ] + } + } + + @objc public func deleteEntitiesFile() -> NSNumber { + guard let appGroupDir = getSharedDirectory() else { + return NSNumber(false) + } + + let file = "\(appGroupDir)/entities" + do { + try FileManager.default.removeItem(atPath: file) + return NSNumber(true) + } catch { + return NSNumber(false) + } + } + + @objc public func isRunningInSplitView() -> Dictionary { + let queue = DispatchQueue.main + let group = DispatchGroup() + var shouldBeConsideredFullScreen = true + group.enter() + queue.async(group: group) { [weak self] in + shouldBeConsideredFullScreen = self?.isRunningInFullScreen() ?? true + group.leave() + } + group.wait() + return [ + "isSplit": !shouldBeConsideredFullScreen, + "isTablet": UIDevice.current.userInterfaceIdiom == .pad, + ] + } + + @objc public func getWindowDimensions() -> Dictionary { + let queue = DispatchQueue.main + let group = DispatchGroup() + var dimensions = [ + "width": 0.0, + "height": 0.0 + ] + group.enter() + queue.async(group: group) { [weak self] in + if let (_, frame) = self?.getWindowSize(), + let frame = frame { + dimensions = [ + "width": frame.width, + "height": frame.height + ] + } + group.leave() + } + group.wait() + return dimensions + } + + @objc public func setHasRegisteredLoad() { + hasRegisteredLoad = true + } + + @objc public func getHasRegisteredLoad() -> Dictionary { + return ["hasRegisteredLoad": hasRegisteredLoad] + } + + @objc public func unlockOrientation() { + DispatchQueue.main.async { + OrientationManager.shared.unlockOrientation() + UIDevice.current.setValue(UIInterfaceOrientation.unknown.rawValue, forKey: "orientation") + UINavigationController.attemptRotationToDeviceOrientation() + } + } + + @objc public func lockOrientation() { + DispatchQueue.main.async { + OrientationManager.shared.lockOrientation() + UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation") + UINavigationController.attemptRotationToDeviceOrientation() + } + } +} + + + diff --git a/libraries/@mattermost/rnutils/mattermost-rnutils.podspec b/libraries/@mattermost/rnutils/mattermost-rnutils.podspec new file mode 100644 index 00000000000..08a7c5d9d11 --- /dev/null +++ b/libraries/@mattermost/rnutils/mattermost-rnutils.podspec @@ -0,0 +1,39 @@ +require "json" + +package = JSON.parse(File.read(File.join(__dir__, "package.json"))) + +Pod::Spec.new do |s| + s.name = "mattermost-rnutils" + s.version = package["version"] + s.summary = package["description"] + s.homepage = package["homepage"] + s.license = package["license"] + s.authors = package["author"] + + s.platforms = { :ios => min_ios_version_supported } + s.source = { :git => ".git", :tag => "#{s.version}" } + + s.source_files = "ios/**/*.{h,m,mm,swift}" + + fabric_enabled = ENV["RCT_NEW_ARCH_ENABLED"] == "1" + other_cpp_flags = fabric_enabled ? "-DRCT_NEW_ARCH_ENABLED=1" : "" + + install_modules_dependencies(s) + + s.pod_target_xcconfig = { + 'USE_HEADERMAP' => 'YES', + "DEFINES_MODULE" => "YES", + 'SWIFT_COMPILATION_MODE' => 'wholemodule', + "BUILD_LIBRARY_FOR_DISTRIBUTION" => "YES", + "OTHER_CPLUSPLUSFLAGS" => other_cpp_flags, + "OTHER_SWIFT_FLAGS" => "-no-verify-emitted-module-interface", + "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", + } + + user_header_search_paths = [ + '"${PODS_CONFIGURATION_BUILD_DIR}/mattermost-rnutils/Swift Compatibility Header"', + ] + s.user_target_xcconfig = { + "HEADER_SEARCH_PATHS" => user_header_search_paths, + } +end diff --git a/libraries/@mattermost/rnutils/package.json b/libraries/@mattermost/rnutils/package.json new file mode 100644 index 00000000000..cf5b51102bf --- /dev/null +++ b/libraries/@mattermost/rnutils/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mattermost/rnutils", + "version": "0.0.0", + "description": "Native utility functions for the Mattermost app", + "main": "src/index", + "codegenConfig": { + "name": "RNUtilsSpec", + "type": "modules", + "jsSrcsDir": "src", + "android": { + "javaPackageName": "com.mattermost.rnutils" + } + }, + "author": "Mattermost, Inc.", + "license": "Apache 2.0", + "private": true, + "homepage": "#readme" +} diff --git a/libraries/@mattermost/rnutils/src/NativeRNUtils.ts b/libraries/@mattermost/rnutils/src/NativeRNUtils.ts new file mode 100644 index 00000000000..7ab46c89ce2 --- /dev/null +++ b/libraries/@mattermost/rnutils/src/NativeRNUtils.ts @@ -0,0 +1,75 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {type TurboModule, TurboModuleRegistry} from 'react-native'; + +import type {Double, Int32, UnsafeObject} from 'react-native/Libraries/Types/CodegenTypes'; + +export type SplitView = Readonly<{ + isSplit: boolean; + isTablet: boolean; +}> + +type DatabaseOperationResult = Readonly<{ + error?: string | null; + success: boolean; +}> + +type Notification = Readonly<{ + identifier: string; + payload?: UnsafeObject; + title?: string; + body?: string; + sound?: string; + badge?: Int32; + type?: string; + thread?: string; + channel_id?: string; + root_id?: string; +}> + +type Constants = Readonly<{ + appGroupIdentifier: string; + appGroupSharedDirectory: Readonly<{ + sharedDirectory: string; + databasePath: string; + }>; +}> + +export type WindowDimensionsChanged = Readonly<{ + width: Double; + height: Double; +}> + +type HasRegisteredLoadResponse = { + hasRegisteredLoad: boolean; +} + +export interface Spec extends TurboModule { + readonly getConstants: () => Constants; + + addListener: (eventType: string) => void; + removeListeners: (count: number) => void; + + getRealFilePath: (filePath: string) => Promise; + saveFile: (filePath: string) => Promise; + + getWindowDimensions: () => WindowDimensionsChanged; + isRunningInSplitView: () => SplitView; + unlockOrientation: () => void; + lockPortrait: () => void; + + getHasRegisteredLoad: () => HasRegisteredLoadResponse; + setHasRegisteredLoad: () => void; + + deleteDatabaseDirectory: (databaseName: string, shouldRemoveDirectory: boolean) => DatabaseOperationResult; + renameDatabase: (databaseName: string, newDatabaseName: string) => DatabaseOperationResult; + deleteEntitiesFile: () => boolean; + + getDeliveredNotifications(): Promise; + removeChannelNotifications(serverUrl: string, channelId: string): void; + removeThreadNotifications(serverUrl: string, threadId: string): void; + removeServerNotifications(serverUrl: string): void; +} + +export default TurboModuleRegistry.getEnforcing('RNUtils'); diff --git a/libraries/@mattermost/rnutils/src/index.tsx b/libraries/@mattermost/rnutils/src/index.tsx new file mode 100644 index 00000000000..e0d9e5f4a69 --- /dev/null +++ b/libraries/@mattermost/rnutils/src/index.tsx @@ -0,0 +1,32 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. +import {NativeModules, Platform} from 'react-native'; + +import type {Spec, SplitView, WindowDimensionsChanged} from './NativeRNUtils'; + +const LINKING_ERROR = + 'The package \'@mattermost/rnutils\' doesn\'t seem to be linked. Make sure: \n\n' + + Platform.select({ios: "- You have run 'pod install'\n", default: ''}) + + '- You rebuilt the app after installing the package\n' + + '- You are not using Expo Go\n'; + +// @ts-expect-error global +const isTurboModuleEnabled = global.__turboModuleProxy != null; + +const RNUtilsModule: Spec = isTurboModuleEnabled ? require('./NativeRNUtils').default : NativeModules.RNUtils; + +const RNUtils = RNUtilsModule || new Proxy( + {}, + { + get() { + throw new Error(LINKING_ERROR); + }, + }, +); + +export type SplitViewResult = SplitView; + +export type WindowDimensions = WindowDimensionsChanged; + +export default RNUtils; + diff --git a/metro.config.js b/metro.config.js index ddfe363bbeb..0c114046409 100644 --- a/metro.config.js +++ b/metro.config.js @@ -4,22 +4,13 @@ const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); const defaultConfig = getDefaultConfig(__dirname); -const {assetExts, sourceExts} = defaultConfig.resolver; /** * Metro configuration - * https://facebook.github.io/metro/docs/configuration + * https://reactnative.dev/docs/metro * * @type {import('metro-config').MetroConfig} */ -const config = { - transformer: { - babelTransformerPath: require.resolve('react-native-svg-transformer'), - }, - resolver: { - assetExts: assetExts.filter((ext) => ext !== 'svg'), - sourceExts: [...sourceExts, 'svg'], - }, -}; +const config = {}; module.exports = mergeConfig(defaultConfig, config); diff --git a/package-lock.json b/package-lock.json index 29d4eba223e..3b5eb60e727 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,175 +1,190 @@ { "name": "mattermost-mobile", - "version": "2.17.0", + "version": "2.22.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mattermost-mobile", - "version": "2.16.0", + "version": "2.21.0", "hasInstallScript": true, "license": "Apache 2.0", "dependencies": { - "@formatjs/intl-datetimeformat": "6.12.3", + "@formatjs/intl-datetimeformat": "6.12.5", "@formatjs/intl-getcanonicallocales": "2.3.0", - "@formatjs/intl-listformat": "7.5.5", - "@formatjs/intl-locale": "3.4.5", - "@formatjs/intl-numberformat": "8.10.1", - "@formatjs/intl-pluralrules": "5.2.12", - "@gorhom/bottom-sheet": "4.6.1", - "@mattermost/calls": "github:mattermost/calls-common#cc5e65f6c103138fd013d6fa45eb33bfe7544f2a", - "@mattermost/compass-icons": "0.1.44", - "@mattermost/react-native-emm": "1.4.1", - "@mattermost/react-native-network-client": "1.5.1", - "@mattermost/react-native-paste-input": "0.7.1", - "@mattermost/react-native-turbo-log": "0.3.2", + "@formatjs/intl-listformat": "7.5.7", + "@formatjs/intl-locale": "4.0.0", + "@formatjs/intl-numberformat": "8.10.3", + "@formatjs/intl-pluralrules": "5.2.14", + "@gorhom/bottom-sheet": "4.6.4", + "@mattermost/calls": "github:mattermost/calls-common#07607cf603f1e3f0c86ae248b2332e8da17f9cf8", + "@mattermost/compass-icons": "0.1.45", + "@mattermost/hardware-keyboard": "file:./libraries/@mattermost/hardware-keyboard", + "@mattermost/keyboard-tracker": "file:./libraries/@mattermost/keyboard-tracker", + "@mattermost/react-native-emm": "1.5.0", + "@mattermost/react-native-network-client": "1.7.2", + "@mattermost/react-native-paste-input": "0.8.0", + "@mattermost/react-native-turbo-log": "0.4.0", + "@mattermost/rnshare": "file:./libraries/@mattermost/rnshare", + "@mattermost/rnutils": "file:./libraries/@mattermost/rnutils", "@msgpack/msgpack": "2.8.0", "@nozbe/watermelondb": "0.27.1", - "@react-native-camera-roll/camera-roll": "7.5.2", - "@react-native-clipboard/clipboard": "1.13.2", - "@react-native-community/datetimepicker": "7.6.4", - "@react-native-community/netinfo": "11.3.1", + "@react-native-camera-roll/camera-roll": "7.8.3", + "@react-native-clipboard/clipboard": "1.14.1", + "@react-native-community/datetimepicker": "8.2.0", + "@react-native-community/netinfo": "11.3.2", "@react-native-cookies/cookies": "6.2.1", - "@react-navigation/bottom-tabs": "6.5.20", - "@react-navigation/native": "6.1.17", - "@react-navigation/stack": "6.3.29", - "@sentry/react-native": "5.20.0", + "@react-navigation/bottom-tabs": "6.6.1", + "@react-navigation/native": "6.1.18", + "@react-navigation/stack": "6.4.1", + "@rneui/base": "4.0.0-rc.8", + "@sentry/react-native": "5.33.2", "@stream-io/flat-list-mvcp": "0.10.3", "@voximplant/react-native-foreground-service": "3.0.2", "base-64": "1.0.0", - "commonmark": "npm:@mattermost/commonmark@0.30.1-2", + "commonmark": "npm:@mattermost/commonmark@0.30.1-3", "commonmark-react-renderer": "github:mattermost/commonmark-react-renderer#81b5d27509652bae50b4b510ede777dd3bd923cf", "deep-equal": "2.2.3", "deepmerge": "4.3.1", "emoji-regex": "10.3.0", + "expo": "51.0.24", + "expo-application": "5.9.1", + "expo-crypto": "13.0.2", + "expo-device": "6.0.2", + "expo-image": "1.12.13", + "expo-linear-gradient": "13.0.2", + "expo-store-review": "7.0.2", + "expo-video-thumbnails": "8.0.0", + "expo-web-browser": "13.0.3", + "fflate": "0.8.2", "fuse.js": "7.0.0", "html-entities": "2.5.2", - "jail-monkey": "2.8.0", - "mime-db": "1.52.0", + "mime-db": "1.53.0", "moment-timezone": "0.5.45", - "pako": "2.1.0", - "path-to-regexp": "6.2.2", + "node-html-parser": "6.1.13", + "path-to-regexp": "8.1.0", "react": "18.2.0", "react-freeze": "1.0.4", - "react-intl": "6.6.5", - "react-native": "0.73.6", + "react-intl": "6.6.8", + "react-native": "0.74.5", "react-native-background-timer": "2.4.1", - "react-native-button": "3.1.0", - "react-native-calendars": "1.1304.1", - "react-native-create-thumbnail": "1.6.4", - "react-native-device-info": "10.13.1", - "react-native-document-picker": "9.1.1", + "react-native-document-picker": "9.3.0", "react-native-dotenv": "3.4.11", - "react-native-elements": "3.4.3", "react-native-exception-handler": "2.10.10", - "react-native-fast-image": "8.6.3", "react-native-file-viewer": "2.1.5", - "react-native-fs": "2.20.0", - "react-native-gesture-handler": "2.16.0", + "react-native-gesture-handler": "2.18.1", "react-native-haptic-feedback": "2.2.0", - "react-native-hw-keyboard-event": "0.0.4", "react-native-image-picker": "7.1.2", - "react-native-in-app-review": "4.3.3", "react-native-incall-manager": "4.2.0", "react-native-keyboard-aware-scroll-view": "0.9.5", - "react-native-keyboard-tracking-view": "5.7.0", "react-native-keychain": "8.2.0", - "react-native-linear-gradient": "2.8.3", - "react-native-localize": "3.1.0", + "react-native-localize": "3.2.1", "react-native-math-view": "3.9.5", - "react-native-navigation": "7.39.1", + "react-native-navigation": "7.40.1", "react-native-notifications": "5.1.0", + "react-native-performance": "5.1.2", "react-native-permissions": "4.1.5", - "react-native-reanimated": "3.8.1", - "react-native-safe-area-context": "4.9.0", - "react-native-screens": "3.30.1", + "react-native-reanimated": "3.14.0", + "react-native-safe-area-context": "4.10.8", + "react-native-screens": "3.34.0", "react-native-section-list-get-item-layout": "2.2.3", - "react-native-shadow-2": "7.0.8", - "react-native-share": "10.1.0", - "react-native-svg": "15.1.0", - "react-native-vector-icons": "10.0.3", - "react-native-video": "5.2.1", + "react-native-shadow-2": "7.1.0", + "react-native-share": "10.2.1", + "react-native-svg": "15.4.0", + "react-native-vector-icons": "10.1.0", + "react-native-video": "6.4.3", "react-native-walkthrough-tooltip": "1.6.0", - "react-native-webrtc": "111.0.6", - "react-native-webview": "13.8.4", + "react-native-webrtc": "124.0.3", "react-syntax-highlighter": "15.5.0", - "semver": "7.6.0", + "semver": "7.6.3", "tinycolor2": "1.6.0", "url-parse": "1.5.10" }, "devDependencies": { - "@babel/cli": "7.24.1", - "@babel/core": "7.24.4", - "@babel/eslint-parser": "7.24.1", + "@babel/cli": "7.24.8", + "@babel/core": "7.25.2", + "@babel/eslint-parser": "7.25.1", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-proposal-decorators": "7.24.1", - "@babel/plugin-transform-flow-strip-types": "7.24.1", - "@babel/plugin-transform-runtime": "7.24.3", - "@babel/preset-env": "7.24.4", - "@babel/preset-typescript": "7.24.1", - "@babel/register": "7.23.7", - "@babel/runtime": "7.24.4", - "@react-native/babel-preset": "0.73.21", - "@react-native/eslint-config": "0.73.2", - "@react-native/metro-config": "0.73.5", - "@react-native/typescript-config": "0.73.1", + "@babel/plugin-proposal-decorators": "7.24.7", + "@babel/plugin-transform-flow-strip-types": "7.25.2", + "@babel/plugin-transform-runtime": "7.24.7", + "@babel/preset-env": "7.25.3", + "@babel/preset-typescript": "7.24.7", + "@babel/register": "7.24.6", + "@babel/runtime": "7.25.0", + "@react-native/babel-preset": "0.74.87", + "@react-native/eslint-config": "0.74.87", + "@react-native/metro-config": "0.74.87", + "@react-native/typescript-config": "0.74.87", "@testing-library/react-hooks": "8.0.1", - "@testing-library/react-native": "12.4.5", + "@testing-library/react-native": "12.5.2", "@types/base-64": "1.0.2", "@types/commonmark": "0.27.9", "@types/commonmark-react-renderer": "4.3.4", "@types/deep-equal": "1.0.4", "@types/jest": "29.5.12", - "@types/lodash": "4.17.0", + "@types/lodash": "4.17.7", "@types/mime-db": "1.43.5", "@types/pako": "2.0.3", "@types/querystringify": "2.0.2", - "@types/react": "18.2.77", + "@types/react": "18.3.3", "@types/react-native-background-timer": "2.0.2", - "@types/react-native-button": "3.0.5", "@types/react-native-dotenv": "0.2.2", "@types/react-native-share": "3.3.8", - "@types/react-native-video": "5.0.20", - "@types/react-syntax-highlighter": "15.5.11", + "@types/react-syntax-highlighter": "15.5.13", "@types/semver": "7.5.8", "@types/tinycolor2": "1.4.6", "@types/tough-cookie": "4.0.5", "@types/url-parse": "1.4.11", - "@types/uuid": "9.0.8", - "@typescript-eslint/eslint-plugin": "6.21.0", - "@typescript-eslint/parser": "6.21.0", - "axios": "1.6.8", - "axios-cookiejar-support": "5.0.1", + "@types/uuid": "10.0.0", + "@typescript-eslint/eslint-plugin": "7.13.1", + "@typescript-eslint/parser": "7.13.1", "babel-jest": "29.7.0", "babel-loader": "9.1.3", - "babel-plugin-module-resolver": "5.0.0", - "detox": "20.20.1", + "babel-plugin-module-resolver": "5.0.2", "eslint": "8.57.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.29.1", - "eslint-plugin-jest": "28.2.0", - "eslint-plugin-react": "7.34.1", - "eslint-plugin-react-hooks": "4.6.0", - "husky": "9.0.11", + "eslint-plugin-jest": "28.7.0", + "eslint-plugin-react": "7.35.0", + "eslint-plugin-react-hooks": "4.6.2", + "husky": "9.1.4", "isomorphic-fetch": "3.0.0", "jest": "29.7.0", "jest-cli": "29.7.0", + "jest-expo": "51.0.3", "jetifier": "2.0.0", "mmjstool": "github:mattermost/mattermost-utilities#83b1b311972b8f5e750aae4019457a40abb5aa44", "nock": "13.5.4", "patch-package": "8.0.0", - "react-devtools-core": "5.0.2", - "react-native-svg-transformer": "1.3.0", - "tough-cookie": "4.1.3", - "ts-jest": "29.1.2", - "typescript": "5.3.3", - "uuid": "9.0.1" + "react-devtools-core": "5.3.1", + "tough-cookie": "4.1.4", + "ts-jest": "29.2.4", + "typescript": "5.5.4", + "uuid": "10.0.0" }, "engines": { - "node": "^18.10.0", - "npm": "^9.0.0" + "node": "^18.18.0 || ^20.0.0", + "npm": "^9 || ^10" } }, + "libraries/@mattermost/hardware-keyboard": { + "name": "mattermost-hardware-keyboard", + "version": "0.0.0", + "license": "Apache 2.0" + }, + "libraries/@mattermost/keyboard-tracker": { + "version": "0.0.0", + "license": "Apache 2.0" + }, + "libraries/@mattermost/rnshare": { + "version": "0.0.0", + "license": "Apache 2.0" + }, + "libraries/@mattermost/rnutils": { + "version": "0.0.0", + "license": "Apache 2.0" + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -191,14 +206,149 @@ "node": ">=6.0.0" } }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz", + "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==", + "peer": true, + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz", + "integrity": "sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA==", + "peer": true, + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "form-data": "^4.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "tslib": "^2.2.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", + "peer": true, + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz", + "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.2.0.tgz", + "integrity": "sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng==", + "peer": true, + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", + "peer": true, + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.2.tgz", + "integrity": "sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/opentelemetry-instrumentation-azure-sdk": { + "version": "1.0.0-beta.5", + "resolved": "https://registry.npmjs.org/@azure/opentelemetry-instrumentation-azure-sdk/-/opentelemetry-instrumentation-azure-sdk-1.0.0-beta.5.tgz", + "integrity": "sha512-fsUarKQDvjhmBO4nIfaZkfNSApm1hZBzcvpNbSrXdcUBxu7lRvKsV5DnwszX7cnhLyVOW9yl1uigtRQ1yDANjA==", + "peer": true, + "dependencies": { + "@azure/core-tracing": "^1.0.0", + "@azure/logger": "^1.0.0", + "@opentelemetry/api": "^1.4.1", + "@opentelemetry/core": "^1.15.2", + "@opentelemetry/instrumentation": "^0.41.2", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@babel/cli": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.24.1.tgz", - "integrity": "sha512-HbmrtxyFUr34LwAlV9jS+sSIjUp4FpdtIMGwgufY3AsxrIfsh/HxlMTywsONAZsU0RMYbZtbZFpUCrSGs7o0EA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.24.8.tgz", + "integrity": "sha512-isdp+G6DpRyKc+3Gqxy2rjzgF7Zj9K0mzLNnxz+E/fgeag8qT3vVulX4gY9dGO1q0y+0lUv6V3a+uhUzMzrwXg==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", - "commander": "^4.0.1", + "commander": "^6.2.0", "convert-source-map": "^2.0.0", "fs-readdir-recursive": "^1.1.0", "glob": "^7.2.0", @@ -220,12 +370,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/cli/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" }, "engines": { @@ -233,28 +392,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", - "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.4", - "@babel/parser": "^7.24.4", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -278,10 +439,11 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz", - "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz", + "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==", "dev": true, + "license": "MIT", "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", @@ -292,7 +454,7 @@ }, "peerDependencies": { "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/@babel/eslint-parser/node_modules/semver": { @@ -305,11 +467,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", - "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -319,35 +482,37 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -364,18 +529,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", - "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", + "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "semver": "^6.3.1" }, "engines": { @@ -394,11 +559,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, @@ -433,68 +599,63 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dependencies": { - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -504,32 +665,34 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -539,13 +702,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", - "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -555,94 +719,99 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", - "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "license": "MIT", "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -652,9 +821,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", - "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.2" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -663,12 +836,28 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz", - "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -678,11 +867,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", - "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -692,13 +882,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", - "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -708,12 +898,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", - "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -757,14 +948,13 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.1.tgz", - "integrity": "sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", + "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-decorators": "^7.24.1" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-decorators": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -788,6 +978,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", @@ -932,12 +1138,11 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz", - "integrity": "sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz", + "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -983,11 +1188,11 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", - "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz", + "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -997,11 +1202,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1011,11 +1216,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", - "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1047,11 +1252,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", - "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1155,11 +1360,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", - "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1184,11 +1389,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", - "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1198,14 +1403,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", - "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1215,13 +1421,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", - "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dependencies": { - "@babel/helper-module-imports": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1231,11 +1437,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", - "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1245,11 +1451,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", - "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", + "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1259,12 +1465,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", - "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1274,12 +1480,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", - "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.4", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1290,17 +1496,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", - "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.22.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", + "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "globals": "^11.1.0" }, "engines": { @@ -1311,12 +1517,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", - "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/template": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1326,11 +1532,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", - "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", + "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1340,12 +1546,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", - "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1355,11 +1561,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", - "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1368,12 +1574,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", - "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1384,12 +1606,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", - "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1399,11 +1621,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", - "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1414,12 +1636,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz", - "integrity": "sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz", + "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-flow": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-flow": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1429,12 +1652,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", - "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1444,13 +1667,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", - "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", + "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1460,11 +1683,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", - "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1475,11 +1698,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", - "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", + "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1489,11 +1712,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", - "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1504,11 +1727,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", - "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1518,12 +1741,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", - "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1533,13 +1756,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", + "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1549,14 +1772,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", - "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1566,12 +1790,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", - "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1581,12 +1805,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1596,11 +1820,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", - "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1610,11 +1834,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", - "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1625,11 +1849,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", - "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1640,14 +1864,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", - "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.1" + "@babel/plugin-transform-parameters": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1657,12 +1881,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", - "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1672,11 +1896,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", - "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1687,12 +1911,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", - "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1703,11 +1928,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", - "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1717,12 +1942,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", - "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1732,13 +1957,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", - "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1749,11 +1974,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", - "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1763,11 +1988,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", - "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", + "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1777,15 +2002,30 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", - "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", + "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", + "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1822,12 +2062,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", + "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", - "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1838,11 +2094,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", - "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1852,12 +2108,12 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", - "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", "dependencies": { - "@babel/helper-module-imports": "^7.24.3", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.1", "babel-plugin-polyfill-regenerator": "^0.6.1", @@ -1879,11 +2135,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", - "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1893,12 +2149,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", - "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1908,11 +2164,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", - "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1922,11 +2178,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", - "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1936,11 +2192,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", - "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1950,14 +2207,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz", - "integrity": "sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz", + "integrity": "sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.4", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-typescript": "^7.24.1" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1967,11 +2224,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", - "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1981,12 +2238,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", - "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1996,12 +2253,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", - "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2011,12 +2268,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", - "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2026,26 +2283,28 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz", - "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.1", - "@babel/plugin-syntax-import-attributes": "^7.24.1", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -2057,59 +2316,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.1", - "@babel/plugin-transform-async-generator-functions": "^7.24.3", - "@babel/plugin-transform-async-to-generator": "^7.24.1", - "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.4", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.4", - "@babel/plugin-transform-classes": "^7.24.1", - "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.1", - "@babel/plugin-transform-dotall-regex": "^7.24.1", - "@babel/plugin-transform-duplicate-keys": "^7.24.1", - "@babel/plugin-transform-dynamic-import": "^7.24.1", - "@babel/plugin-transform-exponentiation-operator": "^7.24.1", - "@babel/plugin-transform-export-namespace-from": "^7.24.1", - "@babel/plugin-transform-for-of": "^7.24.1", - "@babel/plugin-transform-function-name": "^7.24.1", - "@babel/plugin-transform-json-strings": "^7.24.1", - "@babel/plugin-transform-literals": "^7.24.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", - "@babel/plugin-transform-member-expression-literals": "^7.24.1", - "@babel/plugin-transform-modules-amd": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-modules-systemjs": "^7.24.1", - "@babel/plugin-transform-modules-umd": "^7.24.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.24.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", - "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.1", - "@babel/plugin-transform-object-super": "^7.24.1", - "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.1", - "@babel/plugin-transform-parameters": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.1", - "@babel/plugin-transform-property-literals": "^7.24.1", - "@babel/plugin-transform-regenerator": "^7.24.1", - "@babel/plugin-transform-reserved-words": "^7.24.1", - "@babel/plugin-transform-shorthand-properties": "^7.24.1", - "@babel/plugin-transform-spread": "^7.24.1", - "@babel/plugin-transform-sticky-regex": "^7.24.1", - "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.1", - "@babel/plugin-transform-unicode-escapes": "^7.24.1", - "@babel/plugin-transform-unicode-property-regex": "^7.24.1", - "@babel/plugin-transform-unicode-regex": "^7.24.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "engines": { @@ -2119,6 +2379,105 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-classes": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-literals": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -2156,16 +2515,36 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/preset-react": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", + "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", - "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", + "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-syntax-jsx": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-typescript": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2175,9 +2554,9 @@ } }, "node_modules/@babel/register": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz", - "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz", + "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==", "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -2198,9 +2577,10 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", - "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2221,31 +2601,30 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", - "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2254,12 +2633,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2449,382 +2829,499 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@flatten-js/interval-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.1.3.tgz", - "integrity": "sha512-xhFWUBoHJFF77cJO1D6REjdgJEMRf2Y2Z+eKEPav8evGKcLSnj1ud5pLXQSbGuxF3VSvT1rWhMfVpXEKJLTL+A==", - "dev": true - }, - "node_modules/@formatjs/ecma402-abstract": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", - "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", + "node_modules/@expo/bunyan": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", + "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", + "engines": [ + "node >=0.10.0" + ], + "license": "MIT", "dependencies": { - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "uuid": "^8.0.0" + }, + "optionalDependencies": { + "mv": "~2", + "safe-json-stringify": "~1" } }, - "node_modules/@formatjs/fast-memoize": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", - "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", - "dependencies": { - "tslib": "^2.4.0" + "node_modules/@expo/bunyan/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.6.tgz", - "integrity": "sha512-etVau26po9+eewJKYoiBKP6743I1br0/Ie00Pb/S/PtmYfmjTcOn2YCh2yNkSZI12h6Rg+BOgQYborXk46BvkA==", + "node_modules/@expo/cli": { + "version": "0.18.26", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.26.tgz", + "integrity": "sha512-u9bTTXgcjaTloE9CHwxgrb8Me/Al4jiPykbVQpJydakH3GsIZfHy1zaLc7O39CoLjRz37WWi6Y5ZdgtQw9dCPQ==", + "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/icu-skeleton-parser": "1.8.0", - "tslib": "^2.4.0" + "@babel/runtime": "^7.20.0", + "@expo/code-signing-certificates": "0.0.5", + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.8", + "@expo/devcert": "^1.0.0", + "@expo/env": "~0.3.0", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@expo/metro-config": "~0.18.6", + "@expo/osascript": "^2.0.31", + "@expo/package-manager": "^1.5.0", + "@expo/plist": "^0.1.0", + "@expo/prebuild-config": "7.0.8", + "@expo/rudder-sdk-node": "1.1.1", + "@expo/spawn-async": "^1.7.2", + "@expo/xcpretty": "^4.3.0", + "@react-native/dev-middleware": "0.74.85", + "@urql/core": "2.3.6", + "@urql/exchange-retry": "0.3.0", + "accepts": "^1.3.8", + "arg": "5.0.2", + "better-opn": "~3.0.2", + "bplist-creator": "0.0.7", + "bplist-parser": "^0.3.1", + "cacache": "^18.0.2", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "connect": "^3.7.0", + "debug": "^4.3.4", + "env-editor": "^0.4.1", + "fast-glob": "^3.3.2", + "find-yarn-workspace-root": "~2.0.0", + "form-data": "^3.0.1", + "freeport-async": "2.0.0", + "fs-extra": "~8.1.0", + "getenv": "^1.0.0", + "glob": "^7.1.7", + "graphql": "15.8.0", + "graphql-tag": "^2.10.1", + "https-proxy-agent": "^5.0.1", + "internal-ip": "4.3.0", + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1", + "js-yaml": "^3.13.1", + "json-schema-deref-sync": "^0.13.0", + "lodash.debounce": "^4.0.8", + "md5hex": "^1.0.0", + "minimatch": "^3.0.4", + "node-fetch": "^2.6.7", + "node-forge": "^1.3.1", + "npm-package-arg": "^7.0.0", + "open": "^8.3.0", + "ora": "3.4.0", + "picomatch": "^3.0.1", + "pretty-bytes": "5.6.0", + "progress": "2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "require-from-string": "^2.0.2", + "requireg": "^0.2.2", + "resolve": "^1.22.2", + "resolve-from": "^5.0.0", + "resolve.exports": "^2.0.2", + "semver": "^7.6.0", + "send": "^0.18.0", + "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "stacktrace-parser": "^0.1.10", + "structured-headers": "^0.4.1", + "tar": "^6.0.5", + "temp-dir": "^2.0.0", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "text-table": "^0.2.0", + "url-join": "4.0.0", + "wrap-ansi": "^7.0.0", + "ws": "^8.12.1" + }, + "bin": { + "expo-internal": "build/bin/cli" } }, - "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.0.tgz", - "integrity": "sha512-QWLAYvM0n8hv7Nq5BEs4LKIjevpVpbGLAJgOaYzg9wABEoX1j0JO1q2/jVkO6CVlq0dbsxZCngS5aXbysYueqA==", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "tslib": "^2.4.0" + "node_modules/@expo/cli/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/@formatjs/intl": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.1.tgz", - "integrity": "sha512-dsLG15U7xDi8yzKf4hcAWSsCaez3XrjTO2oaRHPyHtXLm1aEzYbDw6bClo/HMHu+iwS5GbDqT3DV+hYP2ylScg==", + "node_modules/@expo/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/fast-memoize": "2.2.0", - "@formatjs/icu-messageformat-parser": "2.7.6", - "@formatjs/intl-displaynames": "6.6.6", - "@formatjs/intl-listformat": "7.5.5", - "intl-messageformat": "10.5.11", - "tslib": "^2.4.0" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "typescript": "^4.7 || 5" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@formatjs/intl-datetimeformat": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/@formatjs/intl-datetimeformat/-/intl-datetimeformat-6.12.3.tgz", - "integrity": "sha512-NCuib8A83IbD2tAEo6kVG+udnHc9Vd0tj3vPlz/HuRQ7O6tvMYyJzbqaNlhjnB4qP7HT0XHWEBQQviM3xjphNw==", + "node_modules/@expo/cli/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@formatjs/intl-displaynames": { - "version": "6.6.6", - "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.6.6.tgz", - "integrity": "sha512-Dg5URSjx0uzF8VZXtHb6KYZ6LFEEhCbAbKoYChYHEOnMFTw/ZU3jIo/NrujzQD2EfKPgQzIq73LOUvW6Z/LpFA==", + "node_modules/@expo/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@formatjs/intl-enumerator": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@formatjs/intl-enumerator/-/intl-enumerator-1.4.5.tgz", - "integrity": "sha512-IbEJHzJO0buoq//RqbLRDettIkZ/WYGOL+8dy5oxzefqlpTsmJFUo5t1sK0/1EoC+eOFiyhdgh5ihCH3Cehc0w==", + "node_modules/@expo/cli/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "license": "MIT", "dependencies": { - "tslib": "^2.4.0" + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@formatjs/intl-getcanonicallocales": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.3.0.tgz", - "integrity": "sha512-BOXbLwqQ7nKua/l7tKqDLRN84WupDXFDhGJQMFvsMVA2dKuOdRaWTxWpL3cJ7qPkoNw11Jf+Xpj4OSPBBvW0eQ==", + "node_modules/@expo/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "tslib": "^2.4.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@formatjs/intl-listformat": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.5.5.tgz", - "integrity": "sha512-XoI52qrU6aBGJC9KJddqnacuBbPlb/bXFN+lIFVFhQ1RnFHpzuFrlFdjD9am2O7ZSYsyqzYRpkVcXeT1GHkwDQ==", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/intl-locale": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/@formatjs/intl-locale/-/intl-locale-3.4.5.tgz", - "integrity": "sha512-obUNTK0Py9sDSTlCXfNQotC7Oy5xd3iBx6dVtzd9YXProkP0NxcRrhlPmfHO9AuYNXdHuarHlozoBxZjOtM4mQ==", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/intl-enumerator": "1.4.5", - "@formatjs/intl-getcanonicallocales": "2.3.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/intl-localematcher": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", - "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/intl-numberformat": { - "version": "8.10.1", - "resolved": "https://registry.npmjs.org/@formatjs/intl-numberformat/-/intl-numberformat-8.10.1.tgz", - "integrity": "sha512-HnlUjoVZzgMvU+is2YGuH6SW6kWLIUo4w28x0MqdPnuy9C8Xw2u+tWsC92rrhOKtg4Fi9ztBeIp1oR+sDyiUIw==", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" - } + "node_modules/@expo/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, - "node_modules/@formatjs/intl-pluralrules": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.12.tgz", - "integrity": "sha512-V/namV1R/FPlsNMcO6U3saOoUqCp6DIPj4BONjj4yW78BU9gRytEJEdifOv+O1cU2Sb7AqOLOju6/qqIRRauLQ==", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "node_modules/@expo/cli/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" } }, - "node_modules/@gorhom/bottom-sheet": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@gorhom/bottom-sheet/-/bottom-sheet-4.6.1.tgz", - "integrity": "sha512-sXqsYqX1/rAbmCC5fb9o6hwSF3KXriC0EGUGvLlhFvjaEEMBrRKFTNndiluRK1HmpUzazVaYdTm/lLkSiA2ooQ==", + "node_modules/@expo/cli/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "license": "MIT", "dependencies": { - "@gorhom/portal": "1.0.14", - "invariant": "^2.2.4" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-native": "*", - "react": "*", - "react-native": "*", - "react-native-gesture-handler": ">=1.10.1", - "react-native-reanimated": ">=2.2.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-native": { - "optional": true - } + "engines": { + "node": ">= 6" } }, - "node_modules/@gorhom/portal": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@gorhom/portal/-/portal-1.0.14.tgz", - "integrity": "sha512-MXyL4xvCjmgaORr/rtryDNFy3kU4qUbKlwtQqqsygd0xX3mhKjOLn6mQK8wfu0RkoE0pBE0nAasRoHua+/QZ7A==", + "node_modules/@expo/cli/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", "dependencies": { - "nanoid": "^3.3.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "peerDependencies": { - "react": "*", - "react-native": "*" + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + "node_modules/@expo/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" + "node_modules/@expo/cli/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, + "node_modules/@expo/cli/node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "license": "MIT", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "chalk": "^2.0.1" }, "engines": { - "node": ">=10.10.0" + "node": ">=4" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "node_modules/@expo/cli/node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "node_modules/@expo/cli/node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node_modules/@expo/cli/node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true + "node_modules/@expo/cli/node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" }, - "node_modules/@isaacs/ttlcache": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", - "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "node_modules/@expo/cli/node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, + "node_modules/@expo/cli/node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, + "node_modules/@expo/cli/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, + "node_modules/@expo/cli/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@expo/cli/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "mimic-fn": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@expo/cli/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@expo/cli/node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/@expo/cli/node_modules/ora/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "node_modules/@expo/cli/node_modules/ora/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/@jest/console/node_modules/slash": { + "node_modules/@expo/cli/node_modules/ora/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@expo/cli/node_modules/ora/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/@expo/cli/node_modules/ora/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/@jest/console/node_modules/supports-color": { + "node_modules/@expo/cli/node_modules/ora/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/cli/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@expo/cli/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/cli/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@expo/cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2832,58 +3329,93 @@ "node": ">=8" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, + "node_modules/@expo/cli/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 4.0.0" + } + }, + "node_modules/@expo/cli/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { - "node-notifier": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { "optional": true } } }, - "node_modules/@jest/core/node_modules/ansi-styles": { + "node_modules/@expo/code-signing-certificates": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", + "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", + "license": "MIT", + "dependencies": { + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" + } + }, + "node_modules/@expo/config": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.3.tgz", + "integrity": "sha512-eOTNM8eOC8gZNHgenySRlc/lwmYY1NOgvjwA8LHuvPT7/eUwD93zrxu3lPD1Cc/P6C/2BcVdfH4hf0tLmDxnsg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/json-file": "^8.3.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "3.34.0" + } + }, + "node_modules/@expo/config-plugins": { + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.8.tgz", + "integrity": "sha512-Fvu6IO13EUw0R9WeqxUO37FkM62YJBNcZb9DyJAOgMz7Ez/vaKQGEjKt9cwT+Q6uirtCATMgaq6VWAW7YW8xXw==", + "license": "MIT", + "dependencies": { + "@expo/config-types": "^51.0.0-unreleased", + "@expo/json-file": "~8.3.0", + "@expo/plist": "^0.1.0", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/@expo/config-plugins/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2894,11 +3426,21 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/core/node_modules/chalk": { + "node_modules/@expo/config-plugins/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@expo/config-plugins/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2910,11 +3452,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/core/node_modules/color-convert": { + "node_modules/@expo/config-plugins/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2922,171 +3464,241 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/core/node_modules/color-name": { + "node_modules/@expo/config-plugins/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "license": "MIT" }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "node_modules/@expo/config-plugins/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/core/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/@expo/config-plugins/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/config-plugins/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/@expo/config-plugins/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/create-cache-key-function": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", - "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "node_modules/@expo/config-plugins/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { - "@jest/types": "^29.6.3" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/@expo/config-plugins/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "p-limit": "^3.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, + "node_modules/@expo/config-plugins/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/config-plugins/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, + "node_modules/@expo/config-types": { + "version": "51.0.2", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.2.tgz", + "integrity": "sha512-IglkIoiDwJMY01lYkF/ZSBoe/5cR+O3+Gx6fpLFjLfgZGBTdyPkKa1g8NWoWQCk+D3cKL2MDbszT2DyRRB0YqQ==", + "license": "MIT" + }, + "node_modules/@expo/config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dependencies": { - "jest-get-type": "^29.6.3" + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/config/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@expo/config/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/@expo/config/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, + "node_modules/@expo/devcert": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.2.tgz", + "integrity": "sha512-FyWghLu7rUaZEZSTLt/XNRukm0c9GFfwP0iFaswoDWpV6alvVg+zRAfCLdIVQEz1SVcQ3zo1hMZFDrnKGvkCuQ==", + "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^7.1.2", + "lodash": "^4.17.21", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "rimraf": "^2.6.2", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^2.4.0" + } + }, + "node_modules/@expo/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@expo/devcert/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, + "node_modules/@expo/devcert/node_modules/sudo-prompt": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", + "license": "MIT" + }, + "node_modules/@expo/env": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.3.0.tgz", + "integrity": "sha512-OtB9XVHWaXidLbHvrVDeeXa09yvTl3+IQN884sO6PhIi2/StXfgSH/9zC7IvzrDB8kW3EBJ1PPLuCUJ2hxAT7Q==", + "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "debug": "^4.3.4", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^1.0.0" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { + "node_modules/@expo/env/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3097,11 +3709,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/chalk": { + "node_modules/@expo/env/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3113,11 +3725,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/color-convert": { + "node_modules/@expo/env/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3125,51 +3737,26 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/reporters/node_modules/color-name": { + "node_modules/@expo/env/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "license": "MIT" }, - "node_modules/@jest/reporters/node_modules/has-flag": { + "node_modules/@expo/env/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/reporters/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { + "node_modules/@expo/env/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3177,101 +3764,230 @@ "node": ">=8" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@expo/image-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.5.1.tgz", + "integrity": "sha512-U/GsFfFox88lXULmFJ9Shfl2aQGcwoKPF7fawSCLixIKtMCpsI+1r0h+5i0nQnmt9tHuzXZDL8+Dg1z6OhkI9A==", + "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "tempy": "0.3.0" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, + "node_modules/@expo/image-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, + "node_modules/@expo/image-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, + "node_modules/@expo/image-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/@jest/test-sequencer/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/@expo/image-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@expo/image-utils/node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, + "node_modules/@expo/image-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { + "node_modules/@expo/image-utils/node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "license": "MIT", + "dependencies": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/image-utils/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=6" + } + }, + "node_modules/@expo/image-utils/node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/json-file": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/json-file/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/@expo/metro-config": { + "version": "0.18.10", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.10.tgz", + "integrity": "sha512-HTYQqKfV0JSuRp5aDvrPHezj5udXOWoXqHOjfTSnce2m13j6D0yYXTJNaKRhlgpPBrkg5DL7z1fL3zwDUpLM4w==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.5", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "@expo/config": "~9.0.0-beta.0", + "@expo/env": "~0.3.0", + "@expo/json-file": "~8.3.0", + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", + "fs-extra": "^9.1.0", + "getenv": "^1.0.0", + "glob": "^7.2.3", + "jsc-safe-url": "^0.2.4", + "lightningcss": "~1.19.0", + "postcss": "~8.4.32", + "resolve-from": "^5.0.0" + } + }, + "node_modules/@expo/metro-config/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3282,11 +3998,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/transform/node_modules/chalk": { + "node_modules/@expo/metro-config/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3298,11 +4014,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/transform/node_modules/color-convert": { + "node_modules/@expo/metro-config/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3310,35 +4026,41 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/transform/node_modules/color-name": { + "node_modules/@expo/metro-config/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "license": "MIT" }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "node_modules/@expo/metro-config/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/@jest/transform/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/@expo/metro-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/transform/node_modules/supports-color": { + "node_modules/@expo/metro-config/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3346,26 +4068,44 @@ "node": ">=8" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@expo/osascript": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.3.tgz", + "integrity": "sha512-aOEkhPzDsaAfolSswObGiYW0Pf0ROfR9J2NBRLQACdQ6uJlyAMiPF45DVEVknAU9juKh0y8ZyvC9LXqLEJYohA==", + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@expo/spawn-async": "^1.7.2", + "exec-async": "^2.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { + "node_modules/@expo/package-manager": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.5.2.tgz", + "integrity": "sha512-IuA9XtGBilce0q8cyxtWINqbzMB1Fia0Yrug/O53HNuRSwQguV/iqjV68bsa4z8mYerePhcFgtvISWLAlNEbUA==", + "license": "MIT", + "dependencies": { + "@expo/json-file": "^8.3.0", + "@expo/spawn-async": "^1.7.2", + "ansi-regex": "^5.0.0", + "chalk": "^4.0.0", + "find-up": "^5.0.0", + "find-yarn-workspace-root": "~2.0.0", + "js-yaml": "^3.13.1", + "micromatch": "^4.0.2", + "npm-package-arg": "^7.0.0", + "ora": "^3.4.0", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" + } + }, + "node_modules/@expo/package-manager/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3376,10 +4116,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/types/node_modules/chalk": { + "node_modules/@expo/package-manager/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3391,10 +4132,23 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/types/node_modules/color-convert": { + "node_modules/@expo/package-manager/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/package-manager/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3402,396 +4156,439 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/types/node_modules/color-name": { + "node_modules/@expo/package-manager/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, - "node_modules/@jest/types/node_modules/has-flag": { + "node_modules/@expo/package-manager/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@expo/package-manager/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/package-manager/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@expo/package-manager/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "node_modules/@expo/package-manager/node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "chalk": "^2.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=4" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@expo/package-manager/node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=4" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@expo/package-manager/node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=4" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "node_modules/@expo/package-manager/node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "color-name": "1.1.3" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "node_modules/@expo/package-manager/node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "node_modules/@expo/package-manager/node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/@mattermost/calls": { - "name": "@calls/common", - "version": "0.14.0", - "resolved": "git+ssh://git@github.com/mattermost/calls-common.git#cc5e65f6c103138fd013d6fa45eb33bfe7544f2a", - "integrity": "sha512-fWCVnjuU3LQ8RO35uI9Qypi7HSVWoALcbNIotNcWd52XQ+BLgt69nSpKRli9qbvj4d9W/UgPaT3bOsyBvIXQrA==" - }, - "node_modules/@mattermost/commonmark": { - "version": "0.30.1-2", - "resolved": "https://registry.npmjs.org/@mattermost/commonmark/-/commonmark-0.30.1-2.tgz", - "integrity": "sha512-r/xhNVt49pEFTjOgmKvjnPNM5RA8OztWsUn3CSQBcXiH2r36QipnR6qxU1hHo3XCteXkYDu9ypn+voA+jaN4Xg==", - "peer": true, + "node_modules/@expo/package-manager/node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "dependencies": { - "entities": "~3.0.1", - "mdurl": "~1.0.1", - "minimist": "~1.2.5", - "string.prototype.repeat": "^1.0.0", - "xregexp": "5.1.0" - }, - "bin": { - "commonmark": "bin/commonmark" + "has-flag": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/@mattermost/compass-icons": { - "version": "0.1.44", - "resolved": "https://registry.npmjs.org/@mattermost/compass-icons/-/compass-icons-0.1.44.tgz", - "integrity": "sha512-cAERA4bzbNcKbVAYdAxVXOhKpmRvs6IUom/XojEg1H7Pyz1g12D+wab849TEpANeyc5j65cjM4oUBO+KYHwpyA==" - }, - "node_modules/@mattermost/react-native-emm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@mattermost/react-native-emm/-/react-native-emm-1.4.1.tgz", - "integrity": "sha512-Twh1AeuQC+u2ti1XUI6wg0NdU3SJ+Duf7XDg8p+zUlILe7yEtkJENznuLQFLmZ1sj27jAhvCLzW3MN2VG0+kRw==", - "peerDependencies": { - "react": "*", - "react-native": "*" + "node_modules/@expo/package-manager/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/@mattermost/react-native-network-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@mattermost/react-native-network-client/-/react-native-network-client-1.5.1.tgz", - "integrity": "sha512-I2DaWMmeC0TEfFBi3A8gLIuWsox2QyvQOn4HPILLRwRtU1eWNWBCpt/E7U5xN2MjkuloUtt1k8AwWInjbX4JSA==", + "node_modules/@expo/package-manager/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "license": "MIT", "dependencies": { - "validator": "13.11.0", - "zod": "3.22.4" + "mimic-fn": "^1.0.0" }, - "peerDependencies": { - "react": "*", - "react-native": "*" + "engines": { + "node": ">=4" } }, - "node_modules/@mattermost/react-native-paste-input": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@mattermost/react-native-paste-input/-/react-native-paste-input-0.7.1.tgz", - "integrity": "sha512-kY8LKtqRX2T/rtn/HNrzTitijuATvyzd6yl5WNWOsszmyzNcssKStjjCTBup04CyMxfwutUU1CWrYUb3hQO7oA==", + "node_modules/@expo/package-manager/node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "license": "MIT", "dependencies": { - "semver": "7.6.0" + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" }, - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/@mattermost/react-native-turbo-log": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@mattermost/react-native-turbo-log/-/react-native-turbo-log-0.3.2.tgz", - "integrity": "sha512-ITUGeAwLVY5vZvpXt94Rw1a1uhqDr2XhkO5uA7mPC00gOEA5UTPfuG8ra0ThAIOWKr9yG8t4up9q7vuK6KhCEw==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/@msgpack/msgpack": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.8.0.tgz", - "integrity": "sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==", "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, - "optional": true - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, + "node_modules/@expo/package-manager/node_modules/ora/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "dependencies": { - "eslint-scope": "5.1.1" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "node_modules/@expo/package-manager/node_modules/ora/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, + "node_modules/@expo/package-manager/node_modules/ora/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@expo/package-manager/node_modules/ora/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/@expo/package-manager/node_modules/ora/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, + "node_modules/@expo/package-manager/node_modules/ora/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/@nozbe/simdjson": { - "version": "3.1.0-wmelon1", - "resolved": "https://registry.npmjs.org/@nozbe/simdjson/-/simdjson-3.1.0-wmelon1.tgz", - "integrity": "sha512-PQaHHQyvASrcrfzqkZ4ona43m0UjN81NuTWt6rJkOUePGDjxc8MNp2Q7jcod1CIdTsXJ13wRWeFbquwNfhpIQQ==" - }, - "node_modules/@nozbe/sqlite": { - "version": "3.40.1", - "resolved": "https://registry.npmjs.org/@nozbe/sqlite/-/sqlite-3.40.1.tgz", - "integrity": "sha512-uKJOW4sQi3neCmgKhqLr0IJKlb2y5q2p05U5CEDJrCxSyD2uVYvSdh7IMrPjF4sWtzc/Lnk462M4vde7Dn5NSw==" - }, - "node_modules/@nozbe/watermelondb": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@nozbe/watermelondb/-/watermelondb-0.27.1.tgz", - "integrity": "sha512-41Nlq0FMGkcr2CUgtPRQRVAbA8VYI6fpeGlX4eoiLhoh3nbPIlX4RIcjLIEoyGgkCUSNSnNvXrv0RMIJRl4nZQ==", + "node_modules/@expo/package-manager/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "7.21.0", - "@nozbe/simdjson": "3.1.0-wmelon1", - "@nozbe/sqlite": "3.40.1", - "hoist-non-react-statics": "^3.3.2", - "lokijs": "npm:@nozbe/lokijs@1.5.12-wmelon6", - "rxjs": "^7.8.0", - "sql-escape-string": "^1.1.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nozbe/watermelondb/node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "node_modules/@expo/package-manager/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.13.11" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@nozbe/watermelondb/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/@react-native-camera-roll/camera-roll": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@react-native-camera-roll/camera-roll/-/camera-roll-7.5.2.tgz", - "integrity": "sha512-XiVIrW17EFXrFzqB48q6cQOaYeVnw0iC3tH+Jhl+MAHDYGLJp+ulzxCNNwngaMvnVAA5Q2mUMzRocUiJPy8q0g==", - "engines": { - "node": ">= 18.17.0" + "node_modules/@expo/package-manager/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" }, - "peerDependencies": { - "react-native": ">=0.59" + "engines": { + "node": ">=6" } }, - "node_modules/@react-native-clipboard/clipboard": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.13.2.tgz", - "integrity": "sha512-uVM55oEGc6a6ZmSATDeTcMm55A/C1km5X47g0xaoF0Zagv7N/8RGvLceA5L/izPwflIy78t7XQeJUcnGSib0nA==", - "peerDependencies": { - "react": ">=16.0", - "react-native": ">=0.57.0" + "node_modules/@expo/package-manager/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/@react-native-community/cli": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.6.tgz", - "integrity": "sha512-647OSi6xBb8FbwFqX9zsJxOzu685AWtrOUWHfOkbKD+5LOpGORw+GQo0F9rWZnB68rLQyfKUZWJeaD00pGv5fw==", + "node_modules/@expo/package-manager/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@react-native-community/cli-clean": "12.3.6", - "@react-native-community/cli-config": "12.3.6", - "@react-native-community/cli-debugger-ui": "12.3.6", - "@react-native-community/cli-doctor": "12.3.6", - "@react-native-community/cli-hermes": "12.3.6", - "@react-native-community/cli-plugin-metro": "12.3.6", - "@react-native-community/cli-server-api": "12.3.6", - "@react-native-community/cli-tools": "12.3.6", - "@react-native-community/cli-types": "12.3.6", - "chalk": "^4.1.2", - "commander": "^9.4.1", - "deepmerge": "^4.3.0", - "execa": "^5.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.2", - "semver": "^7.5.2" - }, - "bin": { - "react-native": "build/bin.js" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/@react-native-community/cli-clean": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.6.tgz", - "integrity": "sha512-gUU29ep8xM0BbnZjwz9MyID74KKwutq9x5iv4BCr2im6nly4UMf1B1D+V225wR7VcDGzbgWjaezsJShLLhC5ig==", + "node_modules/@expo/plist": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", "dependencies": { - "@react-native-community/cli-tools": "12.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0" + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" } }, - "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@expo/prebuild-config": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.8.tgz", + "integrity": "sha512-wH9NVg6HiwF5y9x0TxiMEeBF+ITPGDXy5/i6OUheSrKpPgb0lF1Mwzl/f2fLPXBEpl+ZXOQ8LlLW32b7K9lrNg==", + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@react-native/normalize-colors": "0.74.85", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "xml2js": "0.6.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "expo-modules-autolinking": ">=0.8.1" } }, - "node_modules/@react-native-community/cli-clean/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@expo/prebuild-config/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-clean/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" } }, - "node_modules/@react-native-community/cli-clean/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/@expo/rudder-sdk-node/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "license": "MIT" + }, + "node_modules/@expo/spawn-async": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@expo/spawn-async/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@react-native-community/cli-config": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.6.tgz", - "integrity": "sha512-JGWSYQ9EAK6m2v0abXwFLEfsqJ1zkhzZ4CV261QZF9MoUNB6h57a274h1MLQR9mG6Tsh38wBUuNfEPUvS1vYew==", + "node_modules/@expo/vector-icons": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.2.tgz", + "integrity": "sha512-70LpmXQu4xa8cMxjp1fydgRPsalefnHaXLzIwaHMEzcZhnyjw2acZz8azRrZOslPVAWlxItOa2Dd7WtD/kI+CA==", "dependencies": { - "@react-native-community/cli-tools": "12.3.6", - "chalk": "^4.1.2", - "cosmiconfig": "^5.1.0", - "deepmerge": "^4.3.0", - "glob": "^7.1.3", - "joi": "^17.2.1" + "prop-types": "^15.8.1" } }, - "node_modules/@react-native-community/cli-config/node_modules/ansi-styles": { + "node_modules/@expo/xcpretty": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.1.tgz", + "integrity": "sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "bin": { + "excpretty": "build/cli.js" + } + }, + "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/xcpretty/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3802,10 +4599,17 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-config/node_modules/chalk": { + "node_modules/@expo/xcpretty/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/@expo/xcpretty/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3817,10 +4621,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-config/node_modules/color-convert": { + "node_modules/@expo/xcpretty/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3828,23 +4633,84 @@ "node": ">=7.0.0" } }, - "node_modules/@react-native-community/cli-config/node_modules/color-name": { + "node_modules/@expo/xcpretty/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, - "node_modules/@react-native-community/cli-config/node_modules/has-flag": { + "node_modules/@expo/xcpretty/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/xcpretty/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli-config/node_modules/supports-color": { + "node_modules/@expo/xcpretty/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@expo/xcpretty/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/xcpretty/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/xcpretty/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3852,289 +4718,415 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-debugger-ui": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.6.tgz", - "integrity": "sha512-SjUKKsx5FmcK9G6Pb6UBFT0s9JexVStK5WInmANw75Hm7YokVvHEgtprQDz2Uvy5znX5g2ujzrkIU//T15KQzA==", + "node_modules/@formatjs/ecma402-abstract": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz", + "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==", "dependencies": { - "serve-static": "^1.13.1" + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" } }, - "node_modules/@react-native-community/cli-doctor": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.6.tgz", - "integrity": "sha512-fvBDv2lTthfw4WOQKkdTop2PlE9GtfrlNnpjB818MhcdEnPjfQw5YaTUcnNEGsvGomdCs1MVRMgYXXwPSN6OvQ==", + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", + "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", "dependencies": { - "@react-native-community/cli-config": "12.3.6", - "@react-native-community/cli-platform-android": "12.3.6", - "@react-native-community/cli-platform-ios": "12.3.6", - "@react-native-community/cli-tools": "12.3.6", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "deepmerge": "^4.3.0", - "envinfo": "^7.10.0", - "execa": "^5.0.0", - "hermes-profile-transformer": "^0.0.6", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "semver": "^7.5.2", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1", - "yaml": "^2.2.1" + "tslib": "^2.4.0" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.7.8", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz", + "integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/icu-skeleton-parser": "1.8.2", + "tslib": "^2.4.0" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz", + "integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@formatjs/ecma402-abstract": "2.0.0", + "tslib": "^2.4.0" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@formatjs/intl": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.4.tgz", + "integrity": "sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "@formatjs/intl-displaynames": "6.6.8", + "@formatjs/intl-listformat": "7.5.7", + "intl-messageformat": "10.5.14", + "tslib": "^2.4.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "typescript": "^4.7 || 5" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@react-native-community/cli-doctor/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@formatjs/intl-datetimeformat": { + "version": "6.12.5", + "resolved": "https://registry.npmjs.org/@formatjs/intl-datetimeformat/-/intl-datetimeformat-6.12.5.tgz", + "integrity": "sha512-RYVlgQjUWUKZWMPl7Id8iSETXxHYLbHbii1hrDA/LpWtmFqWKFnF8esMXaHxpysDHviEpJbyGIqrYsABWjrFTw==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/@formatjs/intl-displaynames": { + "version": "6.6.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz", + "integrity": "sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } }, - "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "node_modules/@formatjs/intl-enumerator": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@formatjs/intl-enumerator/-/intl-enumerator-1.4.7.tgz", + "integrity": "sha512-03RHnFqfpB4H/jwCwlzC+wkTDk2Fi24JmVIY2PVGvTUpikN2bSr9+8oTXfOC+y7B7VxjCArUnqWXVoctkmy85w==", + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/@formatjs/intl-getcanonicallocales": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.3.0.tgz", + "integrity": "sha512-BOXbLwqQ7nKua/l7tKqDLRN84WupDXFDhGJQMFvsMVA2dKuOdRaWTxWpL3cJ7qPkoNw11Jf+Xpj4OSPBBvW0eQ==", "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "tslib": "^2.4.0" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@formatjs/intl-listformat": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz", + "integrity": "sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" } }, - "node_modules/@react-native-community/cli-hermes": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.6.tgz", - "integrity": "sha512-sNGwfOCl8OAIjWCkwuLpP8NZbuO0dhDI/2W7NeOGDzIBsf4/c4MptTrULWtGIH9okVPLSPX0NnRyGQ+mSwWyuQ==", + "node_modules/@formatjs/intl-locale": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@formatjs/intl-locale/-/intl-locale-4.0.0.tgz", + "integrity": "sha512-+4dbMEGsp1bvB3JB3UHH6YTjMnFTifnfdaHp4ROrCCu50NedA69RBsDCG3eivcZkbj57X9ehGhMWjLxlP+gyVw==", "dependencies": { - "@react-native-community/cli-platform-android": "12.3.6", - "@react-native-community/cli-tools": "12.3.6", - "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6" + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-enumerator": "1.4.7", + "@formatjs/intl-getcanonicallocales": "2.3.0", + "tslib": "^2.4.0" } }, - "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@formatjs/intl-localematcher": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "tslib": "^2.4.0" } }, - "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@formatjs/intl-numberformat": { + "version": "8.10.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-numberformat/-/intl-numberformat-8.10.3.tgz", + "integrity": "sha512-lH3liLMeIjZ19Zxt8RRPnBcpPweS1YNSXRURDiFfvFmRlDZUOd8+GlcVyECcPZPkIoSH/p4lfGrnaUzepxJ92g==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-pluralrules": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.14.tgz", + "integrity": "sha512-l6Ev7aOGXJSh5EPDEqzsbyufdCCKXZk993QXRQebLsB0TXRhIyF4alqjdMEatLwIigK/Mka8kiVIOLeFP5Cj9Q==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@gorhom/bottom-sheet": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/@gorhom/bottom-sheet/-/bottom-sheet-4.6.4.tgz", + "integrity": "sha512-0itLMblLBvepE065w3a60S030c2rNUsGshPC7wbWDm31VyqoaU2xjzh/ojH62YIJOcobBr5QoC30IxBBKDGovQ==", + "license": "MIT", + "dependencies": { + "@gorhom/portal": "1.0.14", + "invariant": "^2.2.4" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "@types/react-native": "*", + "react": "*", + "react-native": "*", + "react-native-gesture-handler": ">=1.10.1", + "react-native-reanimated": ">=2.2.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-native": { + "optional": true + } } }, - "node_modules/@react-native-community/cli-hermes/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@gorhom/portal": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@gorhom/portal/-/portal-1.0.14.tgz", + "integrity": "sha512-MXyL4xvCjmgaORr/rtryDNFy3kU4qUbKlwtQqqsygd0xX3mhKjOLn6mQK8wfu0RkoE0pBE0nAasRoHua+/QZ7A==", "dependencies": { - "color-name": "~1.1.4" + "nanoid": "^3.3.1" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/@react-native-community/cli-hermes/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } }, - "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" } }, - "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=8" + "node": ">=10.10.0" } }, - "node_modules/@react-native-community/cli-platform-android": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.6.tgz", - "integrity": "sha512-DeDDAB8lHpuGIAPXeeD9Qu2+/wDTFPo99c8uSW49L0hkmZJixzvvvffbGQAYk32H0TmaI7rzvzH+qzu7z3891g==", + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { - "@react-native-community/cli-tools": "12.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-xml-parser": "^4.2.4", - "glob": "^7.1.3", - "logkitty": "^0.7.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" - }, - "funding": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.6.tgz", - "integrity": "sha512-3eZ0jMCkKUO58wzPWlvAPRqezVKm9EPZyaPyHbRPWU8qw7JqkvnRlWIaYDGpjCJgVW4k2hKsEursLtYKb188tg==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, "dependencies": { - "@react-native-community/cli-tools": "12.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-xml-parser": "^4.0.12", - "glob": "^7.1.3", - "ora": "^5.4.1" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { + "node_modules/@jest/console/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4145,10 +5137,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { + "node_modules/@jest/console/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4160,10 +5153,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { + "node_modules/@jest/console/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4171,23 +5165,35 @@ "node": ">=7.0.0" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { + "node_modules/@jest/console/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { + "node_modules/@jest/console/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { + "node_modules/@jest/console/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4195,54 +5201,58 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-plugin-metro": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.6.tgz", - "integrity": "sha512-3jxSBQt4fkS+KtHCPSyB5auIT+KKIrPCv9Dk14FbvOaEh9erUWEm/5PZWmtboW1z7CYeNbFMeXm9fM2xwtVOpg==" - }, - "node_modules/@react-native-community/cli-server-api": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.6.tgz", - "integrity": "sha512-80NIMzo8b2W+PL0Jd7NjiJW9mgaT8Y8wsIT/lh6mAvYH7mK0ecDJUYUTAAv79Tbo1iCGPAr3T295DlVtS8s4yQ==", - "dependencies": { - "@react-native-community/cli-debugger-ui": "12.3.6", - "@react-native-community/cli-tools": "12.3.6", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^7.5.1" - } - }, - "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@react-native-community/cli-server-api/node_modules/ansi-styles": { + "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4253,10 +5263,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/chalk": { + "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4268,10 +5279,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/color-convert": { + "node_modules/@jest/core/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4279,42 +5291,35 @@ "node": ">=7.0.0" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/color-name": { + "node_modules/@jest/core/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@react-native-community/cli-server-api/node_modules/has-flag": { + "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, + "node_modules/@jest/core/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/@react-native-community/cli-server-api/node_modules/supports-color": { + "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4322,161 +5327,135 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-tools": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.6.tgz", - "integrity": "sha512-FPEvZn19UTMMXUp/piwKZSh8cMEfO8G3KDtOwo53O347GTcwNrKjgZGtLSPELBX2gr+YlzEft3CoRv2Qmo83fQ==", - "dependencies": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^7.5.2", - "shell-quote": "^1.7.3", - "sudo-prompt": "^9.0.0" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", "dependencies": { - "color-convert": "^2.0.1" + "@jest/types": "^29.6.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">=7.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@react-native-community/cli-tools/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" + "jest-get-type": "^29.6.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dependencies": { - "p-locate": "^5.0.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, "dependencies": { - "is-wsl": "^1.1.0" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-types": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.6.tgz", - "integrity": "sha512-xPqTgcUtZowQ8WKOkI9TLGBwH2bGggOC4d2FFaIRST3gTcjrEeGRNeR5aXCzJFIgItIft8sd7p2oKEdy90+01Q==", - "dependencies": { - "joi": "^17.2.1" + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@react-native-community/cli/node_modules/ansi-styles": { + "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4487,10 +5466,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli/node_modules/chalk": { + "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4502,10 +5482,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli/node_modules/color-convert": { + "node_modules/@jest/reporters/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4513,52 +5494,51 @@ "node": ">=7.0.0" } }, - "node_modules/@react-native-community/cli/node_modules/color-name": { + "node_modules/@jest/reporters/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@react-native-community/cli/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=8" } }, - "node_modules/@react-native-community/cli/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=10" } }, - "node_modules/@react-native-community/cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@jest/reporters/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@react-native-community/cli/node_modules/supports-color": { + "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4566,160 +5546,101 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@react-native-community/datetimepicker": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-7.6.4.tgz", - "integrity": "sha512-mbnZ5xYl4d2dkWPumQD2mTbLrvMunxUQdbmu0CriOLn48Hy1dQLilQcFg3SfVynND0ydJXo5CRPyXWvUaVkrLQ==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dependencies": { - "invariant": "^2.2.4" - } - }, - "node_modules/@react-native-community/netinfo": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-11.3.1.tgz", - "integrity": "sha512-UBnJxyV0b7i9Moa97Av+HKho1ByzX0DtbJXzUQS5E3xhQs6P2D/Os0iw3ouy7joY1TVd6uIhplPbr7l1SJNaNQ==", - "peerDependencies": { - "react-native": ">=0.59" + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native-cookies/cookies": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@react-native-cookies/cookies/-/cookies-6.2.1.tgz", - "integrity": "sha512-D17wCA0DXJkGJIxkL74Qs9sZ3sA+c+kCoGmXVknW7bVw/W+Vv1m/7mWTNi9DLBZSRddhzYw8SU0aJapIaM/g5w==", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, "dependencies": { - "invariant": "^2.2.4" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, - "peerDependencies": { - "react-native": ">= 0.60.2" - } - }, - "node_modules/@react-native/assets-registry": { - "version": "0.73.1", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.73.1.tgz", - "integrity": "sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==", "engines": { - "node": ">=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.73.4", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz", - "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==", + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, "dependencies": { - "@react-native/codegen": "0.73.3" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": ">=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native/babel-preset": { - "version": "0.73.21", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz", - "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.73.4", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native/codegen": { - "version": "0.73.3", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz", - "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==", - "dependencies": { - "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1" - }, + "node_modules/@jest/test-sequencer/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "node": ">=8" } }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.73.17", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.17.tgz", - "integrity": "sha512-F3PXZkcHg+1ARIr6FRQCQiB7ZAA+MQXGmq051metRscoLvgYJwj7dgC8pvgy0kexzUkHu5BNKrZeySzUft3xuQ==", + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "dependencies": { - "@react-native-community/cli-server-api": "12.3.6", - "@react-native-community/cli-tools": "12.3.6", - "@react-native/dev-middleware": "0.73.8", - "@react-native/metro-babel-transformer": "0.73.15", + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "execa": "^5.1.1", - "metro": "^0.80.3", - "metro-config": "^0.80.3", - "metro-core": "^0.80.3", - "node-fetch": "^2.2.0", - "readline": "^1.3.0" + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, "engines": { - "node": ">=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { + "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4730,10 +5651,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { + "node_modules/@jest/transform/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4745,10 +5667,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/color-convert": { + "node_modules/@jest/transform/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4756,23 +5679,35 @@ "node": ">=7.0.0" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/color-name": { + "node_modules/@jest/transform/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@react-native/community-cli-plugin/node_modules/has-flag": { + "node_modules/@jest/transform/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { + "node_modules/@jest/transform/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4780,5426 +5715,5058 @@ "node": ">=8" } }, - "node_modules/@react-native/debugger-frontend": { - "version": "0.73.3", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz", - "integrity": "sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/dev-middleware": { - "version": "0.73.8", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.8.tgz", - "integrity": "sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.73.3", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^1.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "node-fetch": "^2.2.0", - "open": "^7.0.3", - "serve-static": "^1.13.1", - "temp-dir": "^2.0.0", - "ws": "^6.2.2" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/dev-middleware/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@react-native/dev-middleware/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/@react-native/dev-middleware/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@react-native/eslint-config": { - "version": "0.73.2", - "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.73.2.tgz", - "integrity": "sha512-YzMfes19loTfbrkbYNAfHBDXX4oRBzc5wnvHs4h2GIHUj6YKs5ZK5lldqSrBJCdZAI3nuaO9Qj+t5JRwou571w==", - "dev": true, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "@babel/core": "^7.20.0", - "@babel/eslint-parser": "^7.20.0", - "@react-native/eslint-plugin": "0.73.1", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-ft-flow": "^2.0.1", - "eslint-plugin-jest": "^26.5.3", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-react": "^7.30.1", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-native": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=8" }, - "peerDependencies": { - "eslint": ">=8", - "prettier": ">=2" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" + "color-name": "~1.1.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=7.0.0" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6.0.0" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">=6.0.0" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.0.0" } }, - "node_modules/@react-native/eslint-config/node_modules/eslint-plugin-jest": { - "version": "26.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz", - "integrity": "sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==", - "dev": true, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dependencies": { - "@typescript-eslint/utils": "^5.10.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@react-native/eslint-config/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, - "node_modules/@react-native/eslint-plugin": { - "version": "0.73.1", - "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.73.1.tgz", - "integrity": "sha512-8BNMFE8CAI7JLWLOs3u33wcwcJ821LYs5g53Xyx9GhSg0h8AygTwDrwmYb/pp04FkCNCPjKPBoaYRthQZmxgwA==", - "dev": true, - "engines": { - "node": ">=18" + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.73.4", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz", - "integrity": "sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg==", - "engines": { - "node": ">=18" + "node_modules/@mattermost/calls": { + "name": "@mattermost/calls-common", + "version": "0.27.2", + "resolved": "git+ssh://git@github.com/mattermost/calls-common.git#07607cf603f1e3f0c86ae248b2332e8da17f9cf8", + "integrity": "sha512-aZIYwtgRVj8tdWJUPtAr4TPNa6tNM3lnRkC74CkSsFCpwZ1miwov0B4TLYG4Srj1rTgUqUwG3gQz4o5JHJ2fuQ==", + "dependencies": { + "@msgpack/msgpack": "^3.0.0-beta2", + "fflate": "^0.8.2" } }, - "node_modules/@react-native/js-polyfills": { - "version": "0.73.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz", - "integrity": "sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==", + "node_modules/@mattermost/calls/node_modules/@msgpack/msgpack": { + "version": "3.0.0-beta2", + "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-3.0.0-beta2.tgz", + "integrity": "sha512-y+l1PNV0XDyY8sM3YtuMLK5vE3/hkfId+Do8pLo/OPxfxuFAUwcGz3oiiUuV46/aBpwTzZ+mRWVMtlSKbradhw==", "engines": { - "node": ">=18" + "node": ">= 14" } }, - "node_modules/@react-native/metro-babel-transformer": { - "version": "0.73.15", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz", - "integrity": "sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==", + "node_modules/@mattermost/commonmark": { + "version": "0.30.1-2", + "resolved": "https://registry.npmjs.org/@mattermost/commonmark/-/commonmark-0.30.1-2.tgz", + "integrity": "sha512-r/xhNVt49pEFTjOgmKvjnPNM5RA8OztWsUn3CSQBcXiH2r36QipnR6qxU1hHo3XCteXkYDu9ypn+voA+jaN4Xg==", + "peer": true, "dependencies": { - "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.73.21", - "hermes-parser": "0.15.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" + "entities": "~3.0.1", + "mdurl": "~1.0.1", + "minimist": "~1.2.5", + "string.prototype.repeat": "^1.0.0", + "xregexp": "5.1.0" }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/metro-config": { - "version": "0.73.5", - "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.73.5.tgz", - "integrity": "sha512-3bNWoHzOzP/+qoLJtRhOVXrnxKmSY3i4y5PXyMQlIvvOI/GQbXulPpEZxK/yUrf1MmeXHLLFufFbQWlfDEDoxA==", - "dev": true, - "dependencies": { - "@react-native/js-polyfills": "0.73.1", - "@react-native/metro-babel-transformer": "0.73.15", - "metro-config": "^0.80.3", - "metro-runtime": "^0.80.3" + "bin": { + "commonmark": "bin/commonmark" }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@react-native/normalize-color": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", - "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==" + "node_modules/@mattermost/compass-icons": { + "version": "0.1.45", + "resolved": "https://registry.npmjs.org/@mattermost/compass-icons/-/compass-icons-0.1.45.tgz", + "integrity": "sha512-xNuQG6FpmIYh+7ZAP2Qs/kAgS/O23IWOMEymaVJHFvQq8buCLdQz/b/2WgJZSLeoJjdfqhRMDDJmgaG2UEQD1w==" }, - "node_modules/@react-native/normalize-colors": { - "version": "0.73.2", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz", - "integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==" + "node_modules/@mattermost/hardware-keyboard": { + "resolved": "libraries/@mattermost/hardware-keyboard", + "link": true }, - "node_modules/@react-native/typescript-config": { - "version": "0.73.1", - "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.73.1.tgz", - "integrity": "sha512-7Wrmdp972ZO7xvDid+xRGtvX6xz47cpGj7Y7VKlUhSVFFqbOGfB5WCpY1vMr6R/fjl+Og2fRw+TETN2+JnJi0w==", - "dev": true + "node_modules/@mattermost/keyboard-tracker": { + "resolved": "libraries/@mattermost/keyboard-tracker", + "link": true }, - "node_modules/@react-native/virtualized-lists": { - "version": "0.73.4", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.73.4.tgz", - "integrity": "sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog==", - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, + "node_modules/@mattermost/react-native-emm": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@mattermost/react-native-emm/-/react-native-emm-1.5.0.tgz", + "integrity": "sha512-TvgZdBCrnEhi6pL5k5lS1RKxL76bhXJ4dgVxAdePtGR1jOAi3BZQEt+/f5giW1g/YAa/ft+YQwT05H9FjOJVqQ==", "peerDependencies": { + "react": "*", "react-native": "*" } }, - "node_modules/@react-navigation/bottom-tabs": { - "version": "6.5.20", - "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz", - "integrity": "sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA==", + "node_modules/@mattermost/react-native-network-client": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@mattermost/react-native-network-client/-/react-native-network-client-1.7.2.tgz", + "integrity": "sha512-UaFhUaQkmb6Hq2LOyutiwL0HeMVHmhBBpgojLi83zXXXB5OgNWDgqbDBo6Y986c5TwhCy1/LxENdHBc+mI4RZA==", + "license": "MIT", "dependencies": { - "@react-navigation/elements": "^1.3.30", - "color": "^4.2.3", - "warn-once": "^0.1.0" + "validator": "13.12.0", + "zod": "3.23.8" }, "peerDependencies": { - "@react-navigation/native": "^6.0.0", "react": "*", - "react-native": "*", - "react-native-safe-area-context": ">= 3.0.0", - "react-native-screens": ">= 3.0.0" + "react-native": "*" } }, - "node_modules/@react-navigation/core": { - "version": "6.4.16", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.16.tgz", - "integrity": "sha512-UDTJBsHxnzgFETR3ZxhctP+RWr4SkyeZpbhpkQoIGOuwSCkt1SE0qjU48/u6r6w6XlX8OqVudn1Ab0QFXTHxuQ==", + "node_modules/@mattermost/react-native-paste-input": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@mattermost/react-native-paste-input/-/react-native-paste-input-0.8.0.tgz", + "integrity": "sha512-Tn+9gmq/Z+xr+sUlbnggUFBDYadSvDJotFgILQaXYjjff0huxnDrfGLPYGS07iXW8fokgPVaLEtsyuf1YxrC6w==", "dependencies": { - "@react-navigation/routers": "^6.1.9", - "escape-string-regexp": "^4.0.0", - "nanoid": "^3.1.23", - "query-string": "^7.1.3", - "react-is": "^16.13.0", - "use-latest-callback": "^0.1.9" + "semver": "7.6.0" }, "peerDependencies": { - "react": "*" - } - }, - "node_modules/@react-navigation/elements": { - "version": "1.3.30", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.30.tgz", - "integrity": "sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ==", - "peerDependencies": { - "@react-navigation/native": "^6.0.0", "react": "*", - "react-native": "*", - "react-native-safe-area-context": ">= 3.0.0" + "react-native": "*" } }, - "node_modules/@react-navigation/native": { - "version": "6.1.17", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.17.tgz", - "integrity": "sha512-mer3OvfwWOHoUSMJyLa4vnBH3zpFmCwuzrBPlw7feXklurr/ZDiLjLxUScOot6jLRMz/67GyilEYMmP99LL0RQ==", + "node_modules/@mattermost/react-native-paste-input/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "@react-navigation/core": "^6.4.16", - "escape-string-regexp": "^4.0.0", - "fast-deep-equal": "^3.1.3", - "nanoid": "^3.1.23" + "yallist": "^4.0.0" }, - "peerDependencies": { - "react": "*", - "react-native": "*" + "engines": { + "node": ">=10" } }, - "node_modules/@react-navigation/routers": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.9.tgz", - "integrity": "sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA==", + "node_modules/@mattermost/react-native-paste-input/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { - "nanoid": "^3.1.23" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@react-navigation/stack": { - "version": "6.3.29", - "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.3.29.tgz", - "integrity": "sha512-tzlGkoRgB6P7vgw7rHuWo3TL7Gzu6xh5LMf+zSdCuEiKp/qASzxYfnTEr9tOLbVs/gf+qeukEDheCSAJKVpBXw==", - "dependencies": { - "@react-navigation/elements": "^1.3.30", - "color": "^4.2.3", - "warn-once": "^0.1.0" - }, + "node_modules/@mattermost/react-native-paste-input/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@mattermost/react-native-turbo-log": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@mattermost/react-native-turbo-log/-/react-native-turbo-log-0.4.0.tgz", + "integrity": "sha512-9W0t/FUTyA4mw+RJJ17TXuaPnz/FyBUSDn8poxkdrVjdpeWcIVQCbPOba3BcwDh3owx2JFbp+zGa5PmCHz6Veg==", "peerDependencies": { - "@react-navigation/native": "^6.0.0", "react": "*", - "react-native": "*", - "react-native-gesture-handler": ">= 1.0.0", - "react-native-safe-area-context": ">= 3.0.0", - "react-native-screens": ">= 3.0.0" + "react-native": "*" } }, - "node_modules/@sentry-internal/feedback": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.100.1.tgz", - "integrity": "sha512-yqcRVnjf+qS+tC4NxOKLJOaSJ+csHmh/dHUzvCTkf5rLsplwXYRnny2r0tqGTQ4tuXMxwgSMKPYwicg81P+xuw==", - "dependencies": { - "@sentry/core": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, + "node_modules/@mattermost/rnshare": { + "resolved": "libraries/@mattermost/rnshare", + "link": true + }, + "node_modules/@mattermost/rnutils": { + "resolved": "libraries/@mattermost/rnutils", + "link": true + }, + "node_modules/@microsoft/applicationinsights-web-snippet": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.1.2.tgz", + "integrity": "sha512-qPoOk3MmEx3gS6hTc1/x8JWQG5g4BvRdH7iqZMENBsKCL927b7D7Mvl19bh3sW9Ucrg1fVrF+4hqShwQNdqLxQ==", + "peer": true + }, + "node_modules/@msgpack/msgpack": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.8.0.tgz", + "integrity": "sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==", "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/@sentry-internal/replay-canvas": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.100.1.tgz", - "integrity": "sha512-TnqxqJGhbFhhYRhTG2WLFer+lVieV7mNGeIxFBiw1L4kuj8KGl+C0sknssKyZSRVJFSahhHIosHJGRMkkD//7g==", + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "dev": true, + "optional": true + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, "dependencies": { - "@sentry/core": "7.100.1", - "@sentry/replay": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, - "engines": { - "node": ">=12" + "eslint-scope": "5.1.1" } }, - "node_modules/@sentry-internal/tracing": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.100.1.tgz", - "integrity": "sha512-+u9RRf5eL3StiyiRyAHZmdkAR7GTSGx4Mt4Lmi5NEtCcWlTGZ1QgW2r8ZbhouVmTiJkjhQgYCyej3cojtazeJg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "@sentry/core": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@sentry/browser": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.100.1.tgz", - "integrity": "sha512-IxHQ08ixf0bmaWpe4yt1J4UUsOpg02fxax9z3tOQYXw5MSzz5pDXn8M8DFUVJB3wWuyXhHXTub9yD3VIP9fnoA==", - "dependencies": { - "@sentry-internal/feedback": "7.100.1", - "@sentry-internal/replay-canvas": "7.100.1", - "@sentry-internal/tracing": "7.100.1", - "@sentry/core": "7.100.1", - "@sentry/replay": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@sentry/cli": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.30.0.tgz", - "integrity": "sha512-GTO5e98vy2QwEYQvhE/ZtGUiVrUu4XungLioJbazm+ZOen8cyac8YOapZfozN5mtxjWOWMOwhOqoTeCU3Q8YKQ==", - "hasInstallScript": true, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.7", - "progress": "^2.0.3", - "proxy-from-env": "^1.1.0", - "which": "^2.0.2" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "bin": { - "sentry-cli": "bin/sentry-cli" + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nozbe/simdjson": { + "version": "3.1.0-wmelon1", + "resolved": "https://registry.npmjs.org/@nozbe/simdjson/-/simdjson-3.1.0-wmelon1.tgz", + "integrity": "sha512-PQaHHQyvASrcrfzqkZ4ona43m0UjN81NuTWt6rJkOUePGDjxc8MNp2Q7jcod1CIdTsXJ13wRWeFbquwNfhpIQQ==" + }, + "node_modules/@nozbe/sqlite": { + "version": "3.40.1", + "resolved": "https://registry.npmjs.org/@nozbe/sqlite/-/sqlite-3.40.1.tgz", + "integrity": "sha512-uKJOW4sQi3neCmgKhqLr0IJKlb2y5q2p05U5CEDJrCxSyD2uVYvSdh7IMrPjF4sWtzc/Lnk462M4vde7Dn5NSw==" + }, + "node_modules/@nozbe/watermelondb": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@nozbe/watermelondb/-/watermelondb-0.27.1.tgz", + "integrity": "sha512-41Nlq0FMGkcr2CUgtPRQRVAbA8VYI6fpeGlX4eoiLhoh3nbPIlX4RIcjLIEoyGgkCUSNSnNvXrv0RMIJRl4nZQ==", + "dependencies": { + "@babel/runtime": "7.21.0", + "@nozbe/simdjson": "3.1.0-wmelon1", + "@nozbe/sqlite": "3.40.1", + "hoist-non-react-statics": "^3.3.2", + "lokijs": "npm:@nozbe/lokijs@1.5.12-wmelon6", + "rxjs": "^7.8.0", + "sql-escape-string": "^1.1.0" + } + }, + "node_modules/@nozbe/watermelondb/node_modules/@babel/runtime": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "dependencies": { + "regenerator-runtime": "^0.13.11" }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + } + }, + "node_modules/@nozbe/watermelondb/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" }, - "optionalDependencies": { - "@sentry/cli-darwin": "2.30.0", - "@sentry/cli-linux-arm": "2.30.0", - "@sentry/cli-linux-arm64": "2.30.0", - "@sentry/cli-linux-i686": "2.30.0", - "@sentry/cli-linux-x64": "2.30.0", - "@sentry/cli-win32-i686": "2.30.0", - "@sentry/cli-win32-x64": "2.30.0" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@sentry/cli-darwin": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.30.0.tgz", - "integrity": "sha512-JVesQ9PznbHBOOOwuej2X8/onfXdmAEjBH6fTyWxBl6K8mB4KmBX/aHunXWMBX+VR9X32XZghIqj7acwaFUMPA==", - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@opentelemetry/api": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", + "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", + "peer": true, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/@sentry/cli-linux-arm": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.30.0.tgz", - "integrity": "sha512-MDB3iS31WKg4krCcLo520yxbUERPeA2DCtk9Qs9vSDbQl6Er64dteHllOdx1SDOyX/7GKcxrQEQ6SMmbnOo6wg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux", - "freebsd" - ], + "node_modules/@opentelemetry/core": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.24.1.tgz", + "integrity": "sha512-wMSGfsdmibI88K9wB498zXY04yThPexo8jvwNNlm542HZB7XrrMRBbAyKJqG8qDRJwIBdBrPMi4V9ZPW/sqrcg==", + "peer": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.24.1" + }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, - "node_modules/@sentry/cli-linux-arm64": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.30.0.tgz", - "integrity": "sha512-JNXPkkMubKoZVlcFIoClSmTb9C/I6Bz08DuAZm2jnjRaaOMiCBxI/l50H3dmfVZ6apjEguG9JkjFdb0kqKB90w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux", - "freebsd" - ], + "node_modules/@opentelemetry/instrumentation": { + "version": "0.41.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.41.2.tgz", + "integrity": "sha512-rxU72E0pKNH6ae2w5+xgVYZLzc5mlxAbGzF4shxMVK8YC2QQsfN38B2GPbj0jvrKWWNUElfclQ+YTykkNg/grw==", + "peer": true, + "dependencies": { + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "1.4.2", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.1", + "shimmer": "^1.2.1" + }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/cli-linux-i686": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.30.0.tgz", - "integrity": "sha512-WhVVziFQw/fO0Cc53pY8goPAzJtIs6ORTR89fVbKwa3ZDNkX++mEOECbP7RkmD87kuRxyKzN543RPV971PcAHw==", - "cpu": [ - "x86", - "ia32" - ], - "optional": true, - "os": [ - "linux", - "freebsd" - ], + "node_modules/@opentelemetry/resources": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.24.1.tgz", + "integrity": "sha512-cyv0MwAaPF7O86x5hk3NNgenMObeejZFLJJDVuSeSMIsknlsj3oOZzRv3qSzlwYomXsICfBeFFlxwHQte5mGXQ==", + "peer": true, + "dependencies": { + "@opentelemetry/core": "1.24.1", + "@opentelemetry/semantic-conventions": "1.24.1" + }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, - "node_modules/@sentry/cli-linux-x64": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.30.0.tgz", - "integrity": "sha512-QkiVDeSfspotZ0Au5Yauv2DAm/BC1fL9BwPek/WwddM18I2HqnDp6l4TA4bQeEY++o0KEuNF53cPahpepltPjw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux", - "freebsd" - ], + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.24.1.tgz", + "integrity": "sha512-zz+N423IcySgjihl2NfjBf0qw1RWe11XIAWVrTNOSSI6dtSPJiVom2zipFB2AEEtJWpv0Iz6DY6+TjnyTV5pWg==", + "peer": true, + "dependencies": { + "@opentelemetry/core": "1.24.1", + "@opentelemetry/resources": "1.24.1", + "@opentelemetry/semantic-conventions": "1.24.1" + }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, - "node_modules/@sentry/cli-win32-i686": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.30.0.tgz", - "integrity": "sha512-xLY9B1EEGuNYPKpK6M9PMmcu2PzofdvRtbraTcU6Ck2zALS5oXB9kmWc4dDKucZ/uu9JB0m+Lo4ebaNlca45qQ==", - "cpu": [ - "x86", - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.24.1.tgz", + "integrity": "sha512-VkliWlS4/+GHLLW7J/rVBA00uXus1SWvwFvcUDxDwmFxYfg/2VI6ekwdXS28cjI8Qz2ky2BzG8OUHo+WeYIWqw==", + "peer": true, "engines": { - "node": ">=10" + "node": ">=14" } }, - "node_modules/@sentry/cli-win32-x64": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.30.0.tgz", - "integrity": "sha512-CiXuxnpJI0zho0XE5PVqIS9CwjDEYoMnHQRIr4Jj9OzlGTJ2iSSU6Zp3Ykd7lgo2iK4P6MfxIBm30gFQPnSvVA==", - "cpu": [ - "x64" - ], + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=10" + "node": ">=14" } }, - "node_modules/@sentry/core": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.100.1.tgz", - "integrity": "sha512-f+ItUge/o9AjlveQq0ZUbQauKlPH1FIJbC1TRaYLJ4KNfOdrsh8yZ29RmWv0cFJ/e+FGTr603gWpRPObF5rM8Q==", - "dependencies": { - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, + "node_modules/@react-native-camera-roll/camera-roll": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@react-native-camera-roll/camera-roll/-/camera-roll-7.8.3.tgz", + "integrity": "sha512-F4xNVg/cqN+MiAhoqC11/RafIVQCzLxJVMYke1eBkqLmP5aJ+fKfPPClnRcvXfWHyXOuM17og45LP0S4H09wnQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 18.17.0" + }, + "peerDependencies": { + "react-native": ">=0.59" } }, - "node_modules/@sentry/hub": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.100.1.tgz", - "integrity": "sha512-zdt7f1k+5JE5FAunzBZUEFbvK5YP/LekLMeogTonaRObB07J6fJ9FD4mtNk7pV0utrTDwR+n942qmp+LbWauWA==", + "node_modules/@react-native-clipboard/clipboard": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.14.1.tgz", + "integrity": "sha512-SM3el0A28SwoeJljVNhF217o0nI4E7RfalLmuRQcT1/7tGcxUjgFa3jyrEndYUct8/uxxK5EUNGUu1YEDqzxqw==", + "workspaces": [ + "example" + ], + "peerDependencies": { + "react": "16.9.0 || 16.11.0 || 16.13.1 || 17.0.1 || 17.0.2 || 18.0.0 || 18.1.0 || 18.2.0", + "react-native": "^0.61.5 || ^0.62.3 || ^0.63.2 || ^0.64.2 || ^0.65.0 || ^0.66.0 || ^0.67.0 || ^0.68.0 || ^0.69.0 || ^0.70.0 || ^0.71.0 || ^0.72.0 || ^0.73.0", + "react-native-macos": "^0.61.0 || ^0.62.0 || ^0.63.0 || ^0.64.0 || ^0.65.0 || ^0.66.0 || ^0.67.0 || ^0.68.0 || ^0.69.0 || ^0.70.0 || ^0.71.0 || ^0.72.0 || ^0.73.0", + "react-native-windows": "^0.61.0 || ^0.62.0 || ^0.63.0 || ^0.64.0 || ^0.65.0 || ^0.66.0 || ^0.67.0 || ^0.68.0 || ^0.69.0 || ^0.70.0 || ^0.71.0 || ^0.72.0 || ^0.73.0" + } + }, + "node_modules/@react-native-community/cli": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.9.tgz", + "integrity": "sha512-hFJL4cgLPxncJJd/epQ4dHnMg5Jy/7Q56jFvA3MHViuKpzzfTCJCB+pGY54maZbtym53UJON9WTGpM3S81UfjQ==", + "license": "MIT", "dependencies": { - "@sentry/core": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" + "@react-native-community/cli-clean": "13.6.9", + "@react-native-community/cli-config": "13.6.9", + "@react-native-community/cli-debugger-ui": "13.6.9", + "@react-native-community/cli-doctor": "13.6.9", + "@react-native-community/cli-hermes": "13.6.9", + "@react-native-community/cli-server-api": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", + "@react-native-community/cli-types": "13.6.9", + "chalk": "^4.1.2", + "commander": "^9.4.1", + "deepmerge": "^4.3.0", + "execa": "^5.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.2", + "semver": "^7.5.2" + }, + "bin": { + "rnc-cli": "build/bin.js" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@sentry/integrations": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.100.1.tgz", - "integrity": "sha512-RUyZHcsN3Plc8G4hJN3BCMdbwS8ljUY3E3iLjzucA4HroBsGk5AMc6n7Pp/QqFIRgxrPjKEgA52Wgy5Nq6dSvw==", + "node_modules/@react-native-community/cli-clean": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.9.tgz", + "integrity": "sha512-7Dj5+4p9JggxuVNOjPbduZBAP1SUgNhLKVw5noBUzT/3ZpUZkDM+RCSwyoyg8xKWoE4OrdUAXwAFlMcFDPKykA==", + "license": "MIT", "dependencies": { - "@sentry/core": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1", - "localforage": "^1.8.1" - }, - "engines": { - "node": ">=8" + "@react-native-community/cli-tools": "13.6.9", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2" } }, - "node_modules/@sentry/react": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.100.1.tgz", - "integrity": "sha512-EdrBtrXVLK2LSx4Rvz/nQP7HZUZQmr+t3GHV8436RAhF6vs5mntACVMBoQJRWiUvtZ1iRo3rIsIdah7DLiFPgQ==", - "dependencies": { - "@sentry/browser": "7.100.1", - "@sentry/core": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1", - "hoist-non-react-statics": "^3.3.2" + "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, - "peerDependencies": { - "react": "15.x || 16.x || 17.x || 18.x" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@sentry/react-native": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@sentry/react-native/-/react-native-5.20.0.tgz", - "integrity": "sha512-1jWqQFRvQeFgYrEXfvr0TTG/kXIGV2KgtkNqlInTTuXFXo6qInFhuu4Ak4zNuitFlfr6Soh2ASlJrpkBKf2pAg==", - "dependencies": { - "@sentry/browser": "7.100.1", - "@sentry/cli": "2.30.0", - "@sentry/core": "7.100.1", - "@sentry/hub": "7.100.1", - "@sentry/integrations": "7.100.1", - "@sentry/react": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, - "bin": { - "sentry-expo-upload-sourcemaps": "scripts/expo-upload-sourcemaps.js" + "node_modules/@react-native-community/cli-clean/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "expo": ">=49.0.0", - "react": ">=17.0.0", - "react-native": ">=0.65.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "expo": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@sentry/replay": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.100.1.tgz", - "integrity": "sha512-B1NFjzGEFaqejxBRdUyEzH8ChXc2kfiqlA/W/Lg0aoWIl2/7nuMk+l4ld9gW5F5bIAXDTVd5vYltb1lWEbpr7w==", + "node_modules/@react-native-community/cli-clean/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "@sentry-internal/tracing": "7.100.1", - "@sentry/core": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12" + "node": ">=7.0.0" } }, - "node_modules/@sentry/types": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.100.1.tgz", - "integrity": "sha512-fLM+LedHuKzOd8IhXBqaQuym+AA519MGjeczBa5kGakes/BbAsUMwsNfjsKQedp7Kh44RgYF99jwoRPK2oDrXw==", + "node_modules/@react-native-community/cli-clean/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@sentry/utils": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.100.1.tgz", - "integrity": "sha512-Ve6dXr1o6xiBe3VCoJgiutmBKrugryI65EZAbYto5XI+t+PjiLLf9wXtEMF24ZrwImo4Lv3E9Uqza+fWkEbw6A==", + "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@sentry/types": "7.100.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "node_modules/@react-native-community/cli-config": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.9.tgz", + "integrity": "sha512-rFfVBcNojcMm+KKHE/xqpqXg8HoKl4EC7bFHUrahMJ+y/tZll55+oX/PGG37rzB8QzP2UbMQ19DYQKC1G7kXeg==", + "license": "MIT", "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dependencies": { - "type-detect": "4.0.8" + "@react-native-community/cli-tools": "13.6.9", + "chalk": "^4.1.2", + "cosmiconfig": "^5.1.0", + "deepmerge": "^4.3.0", + "fast-glob": "^3.3.2", + "joi": "^17.2.1" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/@react-native-community/cli-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@stream-io/flat-list-mvcp": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@stream-io/flat-list-mvcp/-/flat-list-mvcp-0.10.3.tgz", - "integrity": "sha512-2ZK8piYlEfKIPZrH8BpZz9uj8HZcUvMCV0X7qSLSAc/vhLOANBfR0SSn0OaWPbqb2mFGAd4FxmLSPp1zKEYuaw==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "dev": true, + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "dev": true, + "node_modules/@react-native-community/cli-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node_modules/@react-native-community/cli-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "dev": true, + "node_modules/@react-native-community/cli-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@react-native-community/cli-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node_modules/@react-native-community/cli-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=8" } }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@react-native-community/cli-debugger-ui": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.9.tgz", + "integrity": "sha512-TkN7IdFmGPPvTpAo3nCAH9uwGCPxWBEAwpqEZDrq0NWllI7Tdie8vDpGdrcuCcKalmhq6OYnkXzeBah7O1Ztpw==", + "license": "MIT", + "dependencies": { + "serve-static": "^1.13.1" } }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@react-native-community/cli-doctor": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.9.tgz", + "integrity": "sha512-5quFaLdWFQB+677GXh5dGU9I5eg2z6Vg4jOX9vKnc9IffwyIFAyJfCZHrxLSRPDGNXD7biDQUdoezXYGwb6P/A==", + "license": "MIT", + "dependencies": { + "@react-native-community/cli-config": "13.6.9", + "@react-native-community/cli-platform-android": "13.6.9", + "@react-native-community/cli-platform-apple": "13.6.9", + "@react-native-community/cli-platform-ios": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "deepmerge": "^4.3.0", + "envinfo": "^7.10.0", + "execa": "^5.0.0", + "hermes-profile-transformer": "^0.0.6", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "semver": "^7.5.2", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1", + "yaml": "^2.2.1" } }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "dev": true, + "node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6" } }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "dev": true, + "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "dev": true, + "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@svgr/core/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@svgr/core/node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, + "node_modules/@react-native-community/cli-doctor/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=7.0.0" } }, - "node_modules/@svgr/core/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "node_modules/@react-native-community/cli-doctor/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "ansi-regex": "^4.1.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=6" } }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "dev": true, + "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=8" } }, - "node_modules/@svgr/hast-util-to-babel-ast/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node_modules/@react-native-community/cli-hermes": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.9.tgz", + "integrity": "sha512-GvwiwgvFw4Ws+krg2+gYj8sR3g05evmNjAHkKIKMkDTJjZ8EdyxbkifRUs1ZCq3TMZy2oeblZBXCJVOH4W7ZbA==", + "license": "MIT", + "dependencies": { + "@react-native-community/cli-platform-android": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6" } }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "dev": true, + "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "dev": true, + "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@svgr/plugin-svgo/node_modules/argparse": { + "node_modules/@react-native-community/cli-hermes/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=7.0.0" } }, - "node_modules/@svgr/plugin-svgo/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "node_modules/@react-native-community/cli-hermes/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "has-flag": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=8" } }, - "node_modules/@testing-library/react-hooks": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz", - "integrity": "sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==", - "dev": true, + "node_modules/@react-native-community/cli-platform-android": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.9.tgz", + "integrity": "sha512-9KsYGdr08QhdvT3Ht7e8phQB3gDX9Fs427NJe0xnoBh+PDPTI2BD5ks5ttsH8CzEw8/P6H8tJCHq6hf2nxd9cw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5", - "react-error-boundary": "^3.1.0" + "@react-native-community/cli-tools": "13.6.9", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.2.4", + "logkitty": "^0.7.1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0", - "react": "^16.9.0 || ^17.0.0", - "react-dom": "^16.9.0 || ^17.0.0", - "react-test-renderer": "^16.9.0 || ^17.0.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-test-renderer": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@testing-library/react-native": { - "version": "12.4.5", - "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-12.4.5.tgz", - "integrity": "sha512-SfwFwV1MrnvL//9T4C4UyusnZfWy2IOftNU7mG+bspk23bDM9HH1TxsMvec7JVZleraicDO7tP1odFqwb4KPcg==", - "dev": true, + "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { - "jest-matcher-utils": "^29.7.0", - "pretty-format": "^29.7.0", - "redent": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "jest": ">=28.0.0", - "react": ">=16.8.0", - "react-native": ">=0.59", - "react-test-renderer": ">=16.8.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "jest": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, + "node_modules/@react-native-community/cli-platform-android/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=10.13.0" + "node": ">=7.0.0" } }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "node_modules/@react-native-community/cli-platform-android/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, + "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, + "node_modules/@react-native-community/cli-platform-apple": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.9.tgz", + "integrity": "sha512-KoeIHfhxMhKXZPXmhQdl6EE+jGKWwoO9jUVWgBvibpVmsNjo7woaG/tfJMEWfWF3najX1EkQAoJWpCDBMYWtlA==", + "license": "MIT", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "@react-native-community/cli-tools": "13.6.9", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.0.12", + "ora": "^5.4.1" } }, - "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", - "dev": true, + "node_modules/@react-native-community/cli-platform-apple/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/base-64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/base-64/-/base-64-1.0.2.tgz", - "integrity": "sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==", - "dev": true - }, - "node_modules/@types/commonmark": { - "version": "0.27.9", - "resolved": "https://registry.npmjs.org/@types/commonmark/-/commonmark-0.27.9.tgz", - "integrity": "sha512-d3+57WgyPCcIc6oshmcPkmP4+JqRRot9eeZLsBsutWtIxwWivpoyc2wEcolOp8MyO3ZWN846mMdoR02kdHSMCw==", - "dev": true + "node_modules/@react-native-community/cli-platform-apple/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "node_modules/@types/commonmark-react-renderer": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/commonmark-react-renderer/-/commonmark-react-renderer-4.3.4.tgz", - "integrity": "sha512-kuSqn+5YC+hSmKyDUIvwb26K5u6OZTO/EiASrTF35dsLENjpJSvlZ8Ef2I7sxcZ/Wj6PbuTkwRTkwtLc23w6ZA==", - "dev": true, + "node_modules/@react-native-community/cli-platform-apple/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "@types/commonmark": "*", - "@types/react": "*" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@types/deep-equal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/deep-equal/-/deep-equal-1.0.4.tgz", - "integrity": "sha512-tqdiS4otQP4KmY0PR3u6KbZ5EWvhNdUoS/jc93UuK23C220lOZ/9TvjfxdPcKvqwwDVtmtSCrnr0p/2dirAxkA==", - "dev": true + "node_modules/@react-native-community/cli-platform-apple/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, - "node_modules/@types/eslint": { - "version": "8.56.9", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", - "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", - "dev": true, - "peer": true, + "node_modules/@react-native-community/cli-platform-apple/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "peer": true, + "node_modules/@react-native-community/cli-platform-ios": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.9.tgz", + "integrity": "sha512-CiUcHlGs8vE0CAB4oi1f+dzniqfGuhWPNrDvae2nm8dewlahTBwIcK5CawyGezjcJoeQhjBflh9vloska+nlnw==", + "license": "MIT", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "@react-native-community/cli-platform-apple": "13.6.9" } }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true, + "node_modules/@react-native-community/cli-plugin-metro": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.6.tgz", + "integrity": "sha512-3jxSBQt4fkS+KtHCPSyB5auIT+KKIrPCv9Dk14FbvOaEh9erUWEm/5PZWmtboW1z7CYeNbFMeXm9fM2xwtVOpg==", "peer": true }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, + "node_modules/@react-native-community/cli-server-api": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.9.tgz", + "integrity": "sha512-W8FSlCPWymO+tlQfM3E0JmM8Oei5HZsIk5S0COOl0MRi8h0NmHI4WSTF2GCfbFZkcr2VI/fRsocoN8Au4EZAug==", + "license": "MIT", "dependencies": { - "@types/node": "*" + "@react-native-community/cli-debugger-ui": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.1", + "nocache": "^3.0.1", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^6.2.2" } }, - "node_modules/@types/hammerjs": { - "version": "2.0.45", - "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.45.tgz", - "integrity": "sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==" - }, - "node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "license": "MIT", "dependencies": { - "@types/unist": "^2" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" } }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", - "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "license": "MIT", "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" + "@types/yargs-parser": "*" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "node_modules/@react-native-community/cli-server-api/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "*" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "node_modules/@react-native-community/cli-server-api/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { - "@types/istanbul-lib-report": "*" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dev": true, + "node_modules/@react-native-community/cli-server-api/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", - "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", - "dev": true + "node_modules/@react-native-community/cli-server-api/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, - "node_modules/@types/mime-db": { - "version": "1.43.5", - "resolved": "https://registry.npmjs.org/@types/mime-db/-/mime-db-1.43.5.tgz", - "integrity": "sha512-/bfTiIUTNPUBnwnYvUxXAre5MhD88jgagLEQiQtIASjU+bwxd8kS/ASDA4a8ufd8m0Lheu6eeMJHEUpLHoJ28A==", - "dev": true + "node_modules/@react-native-community/cli-server-api/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" } }, - "node_modules/@types/pako": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.3.tgz", - "integrity": "sha512-bq0hMV9opAcrmE0Byyo0fY3Ew4tgOevJmQ9grUhpXQhYfyLJ1Kqg3P33JT5fdbT2AjeAjR51zqqVjAL/HMkx7Q==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" - }, - "node_modules/@types/querystringify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/querystringify/-/querystringify-2.0.2.tgz", - "integrity": "sha512-7d6OQK6pJ//zE32XLK3vI6GHYhBDcYooaRco9cKFGNu59GVatL5+u7rkiAViq44DxDTd/7QQNBWSDHfJGBz/Pw==", - "dev": true + "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" }, - "node_modules/@types/react": { - "version": "18.2.77", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.77.tgz", - "integrity": "sha512-CUT9KUUF+HytDM7WiXKLF9qUSg4tGImwy4FXTlfEDPEkkNUzJ7rVFolYweJ9fS1ljoIaP7M7Rdjc5eUm/Yu5AA==", + "node_modules/@react-native-community/cli-server-api/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/react-native": { - "version": "0.70.19", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.19.tgz", - "integrity": "sha512-c6WbyCgWTBgKKMESj/8b4w+zWcZSsCforson7UdXtXMecG3MxCinYi6ihhrHVPyUrVzORsvEzK8zg32z4pK6Sg==", + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", "dependencies": { - "@types/react": "*" + "async-limiter": "~1.0.0" } }, - "node_modules/@types/react-native-background-timer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/react-native-background-timer/-/react-native-background-timer-2.0.2.tgz", - "integrity": "sha512-cMAep0M5yqUHjiiRPvGiviqiJYdI45KSjbI5ufsIFSQGFwHwrHJC/8yawNhy0G3Gix6fufWLsEj6jC5niUNHiQ==", - "dev": true - }, - "node_modules/@types/react-native-button": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/react-native-button/-/react-native-button-3.0.5.tgz", - "integrity": "sha512-yZjWVBgNVRb93b/UEAfcHRWliYnfjUedoU76OwLsoy5msTacniPEhXLGu5zg9FGqzaa4VfsqCO7vOfiigRFzBQ==", - "dev": true, + "node_modules/@react-native-community/cli-tools": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.9.tgz", + "integrity": "sha512-OXaSjoN0mZVw3nrAwcY1PC0uMfyTd9fz7Cy06dh+EJc+h0wikABsVRzV8cIOPrVV+PPEEXE0DBrH20T2puZzgQ==", + "license": "MIT", "dependencies": { - "@types/react": "*", - "react-native": "*" + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^7.5.2", + "shell-quote": "^1.7.3", + "sudo-prompt": "^9.0.0" } }, - "node_modules/@types/react-native-dotenv": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@types/react-native-dotenv/-/react-native-dotenv-0.2.2.tgz", - "integrity": "sha512-YDgO2hdTK5PaxZrIFtVXrjeFOhJ+7A9a8VDUK4QmHCPGIB5i6DroLG9IpItX5qCshz7aPsQfgy9X3w82Otd4HA==", - "dev": true - }, - "node_modules/@types/react-native-share": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@types/react-native-share/-/react-native-share-3.3.8.tgz", - "integrity": "sha512-b77HzennGSky/ZeqmCePYFSga6zuuGrxsnwgXAGzYKwDifdkC0yAtq8ZxnQMRhWM5sos1FGnzpSkuBrd7ZUXCQ==", - "dev": true, + "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "@types/react": "*", - "react-native": "*" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/react-native-vector-icons": { - "version": "6.4.18", - "resolved": "https://registry.npmjs.org/@types/react-native-vector-icons/-/react-native-vector-icons-6.4.18.tgz", - "integrity": "sha512-YGlNWb+k5laTBHd7+uZowB9DpIK3SXUneZqAiKQaj1jnJCZM0x71GDim5JCTMi4IFkhc9m8H/Gm28T5BjyivUw==", + "node_modules/@react-native-community/cli-tools/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { - "@types/react": "*", - "@types/react-native": "^0.70" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@types/react-native-video": { - "version": "5.0.20", - "resolved": "https://registry.npmjs.org/@types/react-native-video/-/react-native-video-5.0.20.tgz", - "integrity": "sha512-CdD4T43uEKzTNJ/RylTDViNuGuyOPWQUEuA1Y9GY8T+HiE9cwYw1zQNqk8a7zz9GHamlPfJQ+bYoEE9OWjZ/6g==", - "dev": true, + "node_modules/@react-native-community/cli-tools/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "@types/react": "*", - "react-native": "*" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@types/react-syntax-highlighter": { - "version": "15.5.11", - "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.11.tgz", - "integrity": "sha512-ZqIJl+Pg8kD+47kxUjvrlElrraSUrYa4h0dauY/U/FTUuprSCqvUj+9PNQNQzVc6AJgIWUUxn87/gqsMHNbRjw==", - "dev": true, + "node_modules/@react-native-community/cli-tools/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@react-native-community/cli-tools/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", "dependencies": { - "@types/react": "*" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" - }, - "node_modules/@types/tinycolor2": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", - "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", - "dev": true - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true - }, - "node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/@types/url-parse": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@types/url-parse/-/url-parse-1.4.11.tgz", - "integrity": "sha512-FKvKIqRaykZtd4n47LbK/W/5fhQQ1X7cxxzG9A48h0BGN+S04NH7ervcCjM8tyR0lyGru83FAHSmw2ObgKoESg==", - "dev": true - }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" + "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dev": true, + "node_modules/@react-native-community/cli-tools/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "p-locate": "^5.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dev": true, + "node_modules/@react-native-community/cli-tools/node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" + "is-wsl": "^1.1.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, + "node_modules/@react-native-community/cli-tools/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "p-limit": "^3.0.2" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dev": true, + "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node_modules/@react-native-community/cli-types": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.9.tgz", + "integrity": "sha512-RLxDppvRxXfs3hxceW/mShi+6o5yS+kFPnPqZTaMKKR5aSg7LwDpLQW4K2D22irEG8e6RKDkZUeH9aL3vO2O0w==", + "license": "MIT", + "dependencies": { + "joi": "^17.2.1" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, + "node_modules/@react-native-community/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, + "node_modules/@react-native-community/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, + "node_modules/@react-native-community/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "color-name": "~1.1.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=7.0.0" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, + "node_modules/@react-native-community/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@react-native-community/cli/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@react-native-community/cli/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/@react-native-community/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@voximplant/react-native-foreground-service": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@voximplant/react-native-foreground-service/-/react-native-foreground-service-3.0.2.tgz", - "integrity": "sha512-ZIyccOAXPqznA1PAVAYlKZ+GI7kXYCuYgH+gmAkhPouyJbkgrSXaCJJzQ+uBkPr4FBa/PuC/yjzK8vf6tJREQA==", - "peerDependencies": { - "react-native": ">= 0.41.2" + "node_modules/@react-native-community/cli/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dev": true, - "peer": true, + "node_modules/@react-native-community/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true, - "peer": true + "node_modules/@react-native-community/cli/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "peer": true, + "node_modules/@react-native-community/datetimepicker": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-8.2.0.tgz", + "integrity": "sha512-qrUPhiBvKGuG9Y+vOqsc56RPFcHa1SU2qbAMT0hfGkoFIj3FodE0VuPVrEa8fgy7kcD5NQmkZIKgHOBLV0+hWg==", + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "invariant": "^2.2.4" + }, + "peerDependencies": { + "expo": ">=50.0.0", + "react": "*", + "react-native": "*", + "react-native-windows": "*" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + }, + "react-native-windows": { + "optional": true + } } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "peer": true + "node_modules/@react-native-community/netinfo": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-11.3.2.tgz", + "integrity": "sha512-YsaS3Dutnzqd1BEoeC+DEcuNJedYRkN6Ef3kftT5Sm8ExnCF94C/nl4laNxuvFli3+Jz8Df3jO25Jn8A9S0h4w==", + "peerDependencies": { + "react-native": ">=0.59" + } }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dev": true, - "peer": true, + "node_modules/@react-native-cookies/cookies": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@react-native-cookies/cookies/-/cookies-6.2.1.tgz", + "integrity": "sha512-D17wCA0DXJkGJIxkL74Qs9sZ3sA+c+kCoGmXVknW7bVw/W+Vv1m/7mWTNi9DLBZSRddhzYw8SU0aJapIaM/g5w==", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "invariant": "^2.2.4" + }, + "peerDependencies": { + "react-native": ">= 0.60.2" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, + "node_modules/@react-native-mac/virtualized-lists": { + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native-mac/virtualized-lists/-/virtualized-lists-0.73.3.tgz", + "integrity": "sha512-7UcvjGYLIU0s2FzVLUPxHYo68tqtZV6x0AH8B0Hf9mkkpENGdRIKD7wDv0kjb/GkVn+qk94u3u0kQyMNRY9UkQ==", "peer": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react-native": "*" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, + "node_modules/@react-native-windows/cli": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native-windows/cli/-/cli-0.73.4.tgz", + "integrity": "sha512-WVKcRbQSLV/gKA+jnhuC+8k+e0IM4Cla2WeEReBgkSI5uvrU9pEErV1hTdRQAmtUAtgA7QAuOFhZ5EEKKZSE8A==", "peer": true, "dependencies": { - "@xtuc/long": "4.2.2" + "@react-native-windows/codegen": "0.73.1", + "@react-native-windows/fs": "0.73.1", + "@react-native-windows/package-utils": "0.73.1", + "@react-native-windows/telemetry": "0.73.2", + "@xmldom/xmldom": "^0.7.7", + "chalk": "^4.1.0", + "cli-spinners": "^2.2.0", + "envinfo": "^7.5.0", + "find-up": "^4.1.0", + "glob": "^7.1.1", + "lodash": "^4.17.15", + "mustache": "^4.0.1", + "ora": "^3.4.0", + "prompts": "^2.4.1", + "semver": "^7.3.2", + "shelljs": "^0.8.4", + "username": "^5.1.0", + "uuid": "^3.3.2", + "xml-formatter": "^2.4.0", + "xml-parser": "^1.2.1", + "xpath": "^0.0.27" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "react-native": "*" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "engines": { + "node": ">=6" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" + "color-name": "~1.1.4" }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "peer": true }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "peer": true + "node_modules/@react-native-windows/cli/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true, + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true + "node_modules/@react-native-windows/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@react-native-windows/cli/node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "peer": true, "dependencies": { - "event-target-shim": "^5.0.0" + "chalk": "^2.0.1" }, "engines": { - "node": ">=6.5" + "node": ">=4" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@react-native-windows/cli/node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "peer": true, "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" + "node_modules/@react-native-windows/cli/node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "peer": true, - "peerDependencies": { - "acorn": "^8" + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node_modules/@react-native-windows/cli/node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "node_modules/@react-native-windows/cli/node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, "dependencies": { - "debug": "^4.3.4" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 14" + "node": ">=4" } }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "node_modules/@react-native-windows/cli/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "peer": true, "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" + "mimic-fn": "^1.0.0" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "engines": { + "node": ">=4" } }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.3" + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" }, - "peerDependencies": { - "ajv": "^8.8.2" + "engines": { + "node": ">=6" } }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/ora/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "peer": true, "dependencies": { - "type-fest": "^0.21.3" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "node_modules/@react-native-windows/cli/node_modules/ora/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "peer": true, "dependencies": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "node_modules/ansi-fragments/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/ansi-fragments/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/@react-native-windows/cli/node_modules/ora/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "peer": true, "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "color-name": "1.1.3" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@react-native-windows/cli/node_modules/ora/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "node_modules/@react-native-windows/cli/node_modules/ora/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@react-native-windows/cli/node_modules/ora/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, "dependencies": { - "color-convert": "^1.9.0" + "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@react-native-windows/cli/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "peer": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", - "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" + "node": ">=4" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "node_modules/@react-native-windows/cli/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "peer": true, "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, + "node_modules/@react-native-windows/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@react-native-windows/cli/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "peer": true, + "bin": { + "uuid": "bin/uuid" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, + "node_modules/@react-native-windows/codegen": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native-windows/codegen/-/codegen-0.73.1.tgz", + "integrity": "sha512-rwOYHwG9CJu9YPvjZH4rlCDWjNoJUokcfh8belumKD8eZh6G855RiJ3SmcGoozV3r4m7fYWGs71mjQmnyPScXw==", + "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "@react-native-windows/fs": "0.73.1", + "chalk": "^4.1.0", + "globby": "^11.0.4", + "mustache": "^4.0.1", + "source-map-support": "^0.5.19", + "yargs": "^16.2.0" + }, + "bin": { + "react-native-windows-codegen": "bin.js" }, "engines": { - "node": ">= 0.4" + "node": ">= 18" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "react-native": "*" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, + "node_modules/@react-native-windows/codegen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, + "node_modules/@react-native-windows/codegen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", - "es-shim-unscopables": "^1.0.2" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "node_modules/@react-native-windows/codegen/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "peer": true, "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "node_modules/@react-native-windows/codegen/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, "dependencies": { - "tslib": "^2.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" - } - }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "node_modules/@react-native-windows/codegen/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, + "node_modules/@react-native-windows/codegen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/@react-native-windows/codegen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, "dependencies": { - "possible-typed-array-names": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "node": ">=8" } }, - "node_modules/axios-cookiejar-support": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-5.0.1.tgz", - "integrity": "sha512-lwjyusKDJ1dLMRPnARWJCdcRXqmYvNITHnCQHRJGtIIL2QXj/lYPjMg04XZDp8QItzluu0KJqbjYlvI0+5X5Xw==", - "dev": true, + "node_modules/@react-native-windows/codegen/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "peer": true, "dependencies": { - "http-cookie-agent": "^6.0.3" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/3846masa" - }, - "peerDependencies": { - "axios": ">=0.20.0", - "tough-cookie": ">=4.0.0" + "node": ">=10" } }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@react-native-windows/codegen/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "peer": true, + "engines": { + "node": ">=10" } }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, + "node_modules/@react-native-windows/find-repo-root": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native-windows/find-repo-root/-/find-repo-root-0.73.1.tgz", + "integrity": "sha512-CsYidJxvJYIUmbqgrzZEWbVnZjvY4CpfVXlNKhi1BpYj0F26eCAHNHYS38QS+9FIoy+YOyE+jEoTsGVhXkXmOA==", + "peer": true, "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "@react-native-windows/fs": "0.73.1", + "find-up": "^4.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "node": ">= 18" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@react-native-windows/fs": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native-windows/fs/-/fs-0.73.1.tgz", + "integrity": "sha512-FVJeyc1uRJguEdwWsucrOnRWQOB3JlRapPqL3EKUO/i1TX0Fbd8b8MCb9pjCOihoHnN0+aCY9Y8aSar2M33kAw==", + "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "graceful-fs": "^4.2.8" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 18" } }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@react-native-windows/package-utils": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native-windows/package-utils/-/package-utils-0.73.1.tgz", + "integrity": "sha512-psr0ESygZWJoyCXreRzOOJa7cIWuZ5btrpeMYvoFej1p/CaJA65pLHuFiFaFi580KkHFvHJYG8mY3K4PDzqctA==", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@react-native-windows/find-repo-root": "0.73.1", + "@react-native-windows/fs": "0.73.1", + "get-monorepo-packages": "^1.2.0", + "lodash": "^4.17.15" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 18" } }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@react-native-windows/telemetry": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native-windows/telemetry/-/telemetry-0.73.2.tgz", + "integrity": "sha512-QOo5t6aiO+BlPdJgQGYY/9IWtOkI4h/YoAYbpuFsMsLfBuyzM+5yovoeamIf5Cd9zFYM0YUswZ0VJx4Q7zP4zQ==", + "peer": true, "dependencies": { - "color-name": "~1.1.4" + "@react-native-windows/fs": "0.73.1", + "@xmldom/xmldom": "^0.7.7", + "applicationinsights": "2.7.3", + "ci-info": "^3.2.0", + "envinfo": "^7.8.1", + "lodash": "^4.17.21", + "os-locale": "^5.0.0", + "xpath": "^0.0.27" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">= 18" } }, - "node_modules/babel-jest/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/@react-native/assets-registry": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.87.tgz", + "integrity": "sha512-1XmRhqQchN+pXPKEKYdpJlwESxVomJOxtEnIkbo7GAlaN2sym84fHEGDXAjLilih5GVPpcpSmFzTy8jx3LtaFg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.87.tgz", + "integrity": "sha512-+vJYpMnENFrwtgvDfUj+CtVJRJuUnzAUYT0/Pb68Sq9RfcZ5xdcCuUgyf7JO+akW2VTBoJY427wkcxU30qrWWw==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@react-native/codegen": "0.74.87" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "dev": true, + "node_modules/@react-native/babel-preset": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.87.tgz", + "integrity": "sha512-hyKpfqzN2nxZmYYJ0tQIHG99FQO0OWXp/gVggAfEUgiT+yNKas1C60LuofUsK7cd+2o9jrpqgqW4WzEDZoBlTg==", + "license": "MIT", "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.74.87", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">=18" }, "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" + "@babel/core": "*" } }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, + "node_modules/@react-native/codegen": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.87.tgz", + "integrity": "sha512-GMSYDiD+86zLKgMMgz9z0k6FxmRn+z6cimYZKkucW4soGbxWsbjUAZoZ56sJwt2FJ3XVRgXCrnOCgXoH/Bkhcg==", + "license": "MIT", "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" + "@babel/parser": "^7.20.0", + "glob": "^7.1.1", + "hermes-parser": "0.19.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=14.16" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/preset-env": "^7.1.6" } }, - "node_modules/babel-loader/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.87.tgz", + "integrity": "sha512-EgJG9lSr8x3X67dHQKQvU6EkO+3ksVlJHYIVv6U/AmW9dN80BEFxgYbSJ7icXS4wri7m4kHdgeq2PQ7/3vvrTQ==", + "license": "MIT", "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" + "@react-native-community/cli-server-api": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", + "@react-native/dev-middleware": "0.74.87", + "@react-native/metro-babel-transformer": "0.74.87", + "chalk": "^4.0.0", + "execa": "^5.1.1", + "metro": "^0.80.3", + "metro-config": "^0.80.3", + "metro-core": "^0.80.3", + "node-fetch": "^2.2.0", + "querystring": "^0.2.1", + "readline": "^1.3.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.87.tgz", + "integrity": "sha512-MN95DJLYTv4EqJc+9JajA3AJZSBYJz2QEJ3uWlHrOky2vKrbbRVaW1ityTmaZa2OXIvNc6CZwSRSE7xCoHbXhQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.87.tgz", + "integrity": "sha512-7TmZ3hTHwooYgIHqc/z87BMe1ryrIqAUi+AF7vsD+EHCGxHFdMjSpf1BZ2SUPXuLnF2cTiTfV2RwhbPzx0tYIA==", + "license": "MIT", "dependencies": { - "p-locate": "^6.0.0" + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.74.87", + "@rnx-kit/chromium-edge-launcher": "^1.0.0", + "chrome-launcher": "^0.15.2", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "selfsigned": "^2.4.1", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0", + "ws": "^6.2.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/babel-loader/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, + "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "yocto-queue": "^1.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, + "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { - "p-limit": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, + "node_modules/@react-native/community-cli-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, + "node_modules/@react-native/community-cli-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@react-native/community-cli-plugin/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "ms": "2.0.0" } }, - "node_modules/babel-loader/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, + "node_modules/@react-native/community-cli-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, + "node_modules/@react-native/community-cli-plugin/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, + "node_modules/@react-native/community-cli-plugin/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "async-limiter": "~1.0.0" } }, - "node_modules/babel-plugin-module-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz", - "integrity": "sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==", - "dev": true, - "dependencies": { - "find-babel-config": "^2.0.0", - "glob": "^8.0.3", - "pkg-up": "^3.1.0", - "reselect": "^4.1.7", - "resolve": "^1.22.1" - }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.85.tgz", + "integrity": "sha512-gUIhhpsYLUTYWlWw4vGztyHaX/kNlgVspSvKe2XaPA7o3jYKUoNLc3Ov7u70u/MBWfKdcEffWq44eSe3j3s5JQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">= 16" + "node": ">=18" } }, - "node_modules/babel-plugin-module-resolver/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, + "node_modules/@react-native/dev-middleware": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.85.tgz", + "integrity": "sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w==", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.74.85", + "@rnx-kit/chromium-edge-launcher": "^1.0.0", + "chrome-launcher": "^0.15.2", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "selfsigned": "^2.4.1", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0", + "ws": "^6.2.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=18" } }, - "node_modules/babel-plugin-module-resolver/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native/eslint-config": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.74.87.tgz", + "integrity": "sha512-5n1KdlUXxFA10VbcWXncRcV6eDO1AwnCAaNed1Yqzy1nbtyXmkMLoYJC/nnWJdMBqpzCU5HrwhWdyuj2K2OAUg==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@babel/core": "^7.20.0", + "@babel/eslint-parser": "^7.20.0", + "@react-native/eslint-plugin": "0.74.87", + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-ft-flow": "^2.0.1", + "eslint-plugin-jest": "^27.9.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "^7.30.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-native": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "peerDependencies": { + "eslint": ">=8", + "prettier": ">=2" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", - "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", + "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.1", - "semver": "^6.3.1" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" + "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", - "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", + "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "node_modules/@react-native/eslint-config/node_modules/eslint-plugin-jest": { + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "@typescript-eslint/utils": "^5.10.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base-64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", - "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true }, - { - "type": "consulting", - "url": "https://feross.org/support" + "jest": { + "optional": true } - ] + } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/@react-native/eslint-config/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "optional": true, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "node_modules/@react-native/eslint-plugin": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.74.87.tgz", + "integrity": "sha512-AtUQM3ShGlOAV8Z8p9NmnXfrN762Tb4NnInQQPheP1sjbJsFpxTui+S/uGrL7I2wBrdtADnOKkb6yYhRU0OKOg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=18" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/@react-native/gradle-plugin": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.87.tgz", + "integrity": "sha512-T+VX0N1qP+U9V4oAtn7FTX7pfsoVkd1ocyw9swYXgJqU2fK7hC9famW7b3s3ZiufPGPr1VPJe2TVGtSopBjL6A==", + "license": "MIT", + "engines": { + "node": ">=18" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, + "node_modules/@react-native/js-polyfills": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.87.tgz", + "integrity": "sha512-M5Evdn76CuVEF0GsaXiGi95CBZ4IWubHqwXxV9vG9CC9kq0PSkoM2Pn7Lx7dgyp4vT7ccJ8a3IwHbe+5KJRnpw==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/@react-native/metro-babel-transformer": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.87.tgz", + "integrity": "sha512-UsJCO24sNax2NSPBmV1zLEVVNkS88kcgAiYrZHtYSwSjpl4WZ656tIeedBfiySdJ94Hr3kQmBYLipV5zk0NI1A==", + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" + "@babel/core": "^7.20.0", + "@react-native/babel-preset": "0.74.87", + "hermes-parser": "0.19.1", + "nullthrows": "^1.1.1" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" } }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "node_modules/@react-native/metro-config": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.74.87.tgz", + "integrity": "sha512-WjXk7GmzL7/+e5qqc9uumQSl6uCqNlpo8LaKuMxxlUfQ6DsWSXIdbLXmD1k5qTURjL0fZjVQGszgvT1xKYifaQ==", "dev": true, + "license": "MIT", "dependencies": { - "fast-json-stable-stringify": "2.x" + "@react-native/js-polyfills": "0.74.87", + "@react-native/metro-babel-transformer": "0.74.87", + "metro-config": "^0.80.3", + "metro-runtime": "^0.80.3" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "node": ">=18" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "node_modules/@react-native/normalize-colors": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz", + "integrity": "sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw==", + "license": "MIT" }, - "node_modules/bunyamin": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/bunyamin/-/bunyamin-1.6.1.tgz", - "integrity": "sha512-gm44niEx19vp7XYB8nATtQ8WOK9lCU8fN3F2c9nXnD5TYr0qoxNZB1jxfzOYTz5he7lDBxrtvswSDrbiFf7WiA==", + "node_modules/@react-native/typescript-config": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.74.87.tgz", + "integrity": "sha512-nBxot0relWwDlOmjHam0QYmArMFpcDLdJqe4aN1aeWv9KkrE4v36KT7H9h9imGkugZkMs8PJPGPo6eojD09/kA==", "dev": true, + "license": "MIT" + }, + "node_modules/@react-native/virtualized-lists": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.87.tgz", + "integrity": "sha512-lsGxoFMb0lyK/MiplNKJpD+A1EoEUumkLrCjH4Ht+ZlG8S0BfCxmskLZ6qXn3BiDSkLjfjI/qyZ3pnxNBvkXpQ==", + "license": "MIT", "dependencies": { - "@flatten-js/interval-tree": "^1.1.2", - "multi-sort-stream": "^1.0.4", - "stream-json": "^1.7.5", - "trace-event-lib": "^1.3.1" + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=14.18.2" + "node": ">=18" }, "peerDependencies": { - "@types/bunyan": "^1.8.8", - "bunyan": "^1.8.15 || ^2.0.0" + "@types/react": "^18.2.6", + "react": "*", + "react-native": "*" }, "peerDependenciesMeta": { - "@types/bunyan": { - "optional": true - }, - "bunyan": { + "@types/react": { "optional": true } } }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "dev": true, - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" + "node_modules/@react-navigation/bottom-tabs": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.6.1.tgz", + "integrity": "sha512-9oD4cypEBjPuaMiu9tevWGiQ4w/d6l3HNhcJ1IjXZ24xvYDSs0mqjUcdt8SWUolCvRrYc/DmNBLlT83bk0bHTw==", + "license": "MIT", + "dependencies": { + "@react-navigation/elements": "^1.3.31", + "color": "^4.2.3", + "warn-once": "^0.1.0" }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" } }, - "node_modules/bunyan-debug-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bunyan-debug-stream/-/bunyan-debug-stream-3.1.0.tgz", - "integrity": "sha512-VaFYbDVdiSn3ZpdozrjZ8mFpxHXl26t11C1DKRQtbo0EgffqeFNrRLOGIESKVeGEvVu4qMxMSSxzNlSw7oTj7w==", - "dev": true, + "node_modules/@react-navigation/core": { + "version": "6.4.17", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.17.tgz", + "integrity": "sha512-Nd76EpomzChWAosGqWOYE3ItayhDzIEzzZsT7PfGcRFDgW5miHV2t4MZcq9YIK4tzxZjVVpYbIynOOQQd1e0Cg==", + "license": "MIT", "dependencies": { - "chalk": "^4.1.2" - }, - "engines": { - "node": ">=0.12.0" + "@react-navigation/routers": "^6.1.9", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.23", + "query-string": "^7.1.3", + "react-is": "^16.13.0", + "use-latest-callback": "^0.2.1" }, "peerDependencies": { - "bunyan": "*" + "react": "*" } }, - "node_modules/bunyan-debug-stream/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@react-navigation/elements": { + "version": "1.3.31", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.31.tgz", + "integrity": "sha512-bUzP4Awlljx5RKEExw8WYtif8EuQni2glDaieYROKTnaxsu9kEIA515sXQgUDZU4Ob12VoL7+z70uO3qrlfXcQ==", + "license": "MIT", + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0" + } + }, + "node_modules/@react-navigation/native": { + "version": "6.1.18", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.18.tgz", + "integrity": "sha512-mIT9MiL/vMm4eirLcmw2h6h/Nm5FICtnYSdohq4vTLA2FF/6PNhByM7s8ffqoVfE5L0uAa6Xda1B7oddolUiGg==", + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@react-navigation/core": "^6.4.17", + "escape-string-regexp": "^4.0.0", + "fast-deep-equal": "^3.1.3", + "nanoid": "^3.1.23" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/bunyan-debug-stream/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@react-navigation/routers": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.9.tgz", + "integrity": "sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA==", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "nanoid": "^3.1.23" + } + }, + "node_modules/@react-navigation/stack": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.4.1.tgz", + "integrity": "sha512-upMEHOKMtuMu4c9gmoPlO/JqI6mDlSqwXg1aXKOTQLXAF8H5koOLRfrmi7AkdiE9A7lDXWUAZoGuD9O88cYvDQ==", + "license": "MIT", + "dependencies": { + "@react-navigation/elements": "^1.3.31", + "color": "^4.2.3", + "warn-once": "^0.1.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-gesture-handler": ">= 1.0.0", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" + } + }, + "node_modules/@rneui/base": { + "version": "4.0.0-rc.8", + "resolved": "https://registry.npmjs.org/@rneui/base/-/base-4.0.0-rc.8.tgz", + "integrity": "sha512-teJ6bUki+TQ+r+abefEWYb2wRUaMgRhp1oxtKa84UfDqTiCF0ItyJ0L8FhMb6AAkTOkWC34301T7j3H4df6ueA==", + "dependencies": { + "@types/react-native-vector-icons": "^6.4.10", + "color": "^3.2.1", + "deepmerge": "^4.2.2", + "hoist-non-react-statics": "^3.3.2", + "react-native-ratings": "^8.1.0", + "react-native-size-matters": "^0.4.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/react-native-elements" + }, + "peerDependencies": { + "react-native-safe-area-context": ">= 3.0.0", + "react-native-vector-icons": ">7.0.0" } }, - "node_modules/bunyan-debug-stream/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@rneui/base/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "dependencies": { - "color-name": "~1.1.4" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/@rneui/base/node_modules/react-native-ratings": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/react-native-ratings/-/react-native-ratings-8.1.0.tgz", + "integrity": "sha512-+QOJ4G3NjVkI1D+tk4EGx1dCvVfbD2nQdkrj9cXrcAoEiwmbep4z4bZbCKmWMpQ5h2dqbxABU8/eBnbDmvAc3g==", + "dependencies": { + "lodash": "^4.17.15" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/bunyan-debug-stream/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/bunyan-debug-stream/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@rneui/base/node_modules/react-native-size-matters": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/react-native-size-matters/-/react-native-size-matters-0.4.2.tgz", + "integrity": "sha512-DKE3f/sdcozd24oASgkP1iGg+YU3HoajRa5k3a4wkRzpiqREq8SGX12Y5zBgAt/8IivLQoTMYkyQu1/Giuy+zQ==", + "peerDependencies": { + "react-native": "*" } }, - "node_modules/bunyan-debug-stream/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/@rnx-kit/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==", + "license": "Apache-2.0", "dependencies": { - "has-flag": "^4.0.0" + "@types/node": "^18.0.0", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=14.15" } }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/caf": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/caf/-/caf-15.0.1.tgz", - "integrity": "sha512-Xp/IK6vMwujxWZXra7djdYzPdPnEQKa7Mudu2wZgDQ3TJry1I0TgtjEgwZHpoBcMp68j4fb0/FZ1SJyMEgJrXQ==", - "dev": true + "node_modules/@segment/loosely-validate-event": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", + "dependencies": { + "component-type": "^1.2.1", + "join-component": "^1.1.0" + } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/@sentry-internal/feedback": { + "version": "7.119.1", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.119.1.tgz", + "integrity": "sha512-EPyW6EKZmhKpw/OQUPRkTynXecZdYl4uhZwdZuGqnGMAzswPOgQvFrkwsOuPYvoMfXqCH7YuRqyJrox3uBOrTA==", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "@sentry/core": "7.119.1", + "@sentry/types": "7.119.1", + "@sentry/utils": "7.119.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" + } + }, + "node_modules/@sentry-internal/replay-canvas": { + "version": "7.119.1", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.119.1.tgz", + "integrity": "sha512-O/lrzENbMhP/UDr7LwmfOWTjD9PLNmdaCF408Wx8SDuj7Iwc+VasGfHg7fPH4Pdr4nJON6oh+UqoV4IoG05u+A==", + "dependencies": { + "@sentry/core": "7.119.1", + "@sentry/replay": "7.119.1", + "@sentry/types": "7.119.1", + "@sentry/utils": "7.119.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12" } }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "node_modules/@sentry-internal/tracing": { + "version": "7.119.1", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.119.1.tgz", + "integrity": "sha512-cI0YraPd6qBwvUA3wQdPGTy8PzAoK0NZiaTN1LM3IczdPegehWOaEG5GVTnpGnTsmBAzn1xnBXNBhgiU4dgcrQ==", "dependencies": { - "callsites": "^2.0.0" + "@sentry/core": "7.119.1", + "@sentry/types": "7.119.1", + "@sentry/utils": "7.119.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "node_modules/@sentry/babel-plugin-component-annotate": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.20.1.tgz", + "integrity": "sha512-4mhEwYTK00bIb5Y9UWIELVUfru587Vaeg0DQGswv4aIRHIiMKLyNqCEejaaybQ/fNChIZOKmvyqXk430YVd7Qg==", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "node_modules/@sentry/browser": { + "version": "7.119.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.119.1.tgz", + "integrity": "sha512-aMwAnFU4iAPeLyZvqmOQaEDHt/Dkf8rpgYeJ0OEi50dmP6AjG+KIAMCXU7CYCCQDn70ITJo8QD5+KzCoZPYz0A==", "dependencies": { - "caller-callsite": "^2.0.0" + "@sentry-internal/feedback": "7.119.1", + "@sentry-internal/replay-canvas": "7.119.1", + "@sentry-internal/tracing": "7.119.1", + "@sentry/core": "7.119.1", + "@sentry/integrations": "7.119.1", + "@sentry/replay": "7.119.1", + "@sentry/types": "7.119.1", + "@sentry/utils": "7.119.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, + "node_modules/@sentry/browser/node_modules/@sentry/integrations": { + "version": "7.119.1", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.119.1.tgz", + "integrity": "sha512-CGmLEPnaBqbUleVqrmGYjRjf5/OwjUXo57I9t0KKWViq81mWnYhaUhRZWFNoCNQHns+3+GPCOMvl0zlawt+evw==", + "dependencies": { + "@sentry/core": "7.119.1", + "@sentry/types": "7.119.1", + "@sentry/utils": "7.119.1", + "localforage": "^1.8.1" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@sentry/cli": { + "version": "2.36.6", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.36.6.tgz", + "integrity": "sha512-1fcZVwe4H6a3Z1O+7m/z/2em1u67Tf0Zrt2oGEp82bqvCOHA904Wr2otc6GBEuFESB1/Mo8QgD/qwRd9Tv0Otw==", + "hasInstallScript": true, + "dependencies": { + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.7", + "progress": "^2.0.3", + "proxy-from-env": "^1.1.0", + "which": "^2.0.2" + }, + "bin": { + "sentry-cli": "bin/sentry-cli" + }, "engines": { - "node": ">=6" + "node": ">= 10" + }, + "optionalDependencies": { + "@sentry/cli-darwin": "2.36.6", + "@sentry/cli-linux-arm": "2.36.6", + "@sentry/cli-linux-arm64": "2.36.6", + "@sentry/cli-linux-i686": "2.36.6", + "@sentry/cli-linux-x64": "2.36.6", + "@sentry/cli-win32-i686": "2.36.6", + "@sentry/cli-win32-x64": "2.36.6" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001609", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001609.tgz", - "integrity": "sha512-JFPQs34lHKx1B5t1EpQpWH4c+29zIyn/haGsbpfq3suuV9v56enjFt23zqijxGTMwy1p/4H2tjnQMY+p1WoAyA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] + "node_modules/@sentry/cli-darwin": { + "version": "2.36.6", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.36.6.tgz", + "integrity": "sha512-2yKECENqMZKrJY5weA19g4gTgQfeuadWvVu7fVQVsgqoBRIaEhSHJc64ZgiHq2ur06qOuYcQr5FO1VrwUE1pZg==", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "node_modules/@sentry/cli-linux-arm": { + "version": "2.36.6", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.36.6.tgz", + "integrity": "sha512-6zB7w5NawmdzhPHxqkjlhbvQugCBiFrFaUGvb3u1Oo/VCehdmq/v4v8ob4PNN2cJhoDRqQj2mPTfL/ppYNMJuw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux", + "freebsd" + ], "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@sentry/cli-linux-arm64": { + "version": "2.36.6", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.36.6.tgz", + "integrity": "sha512-sLmmbZRE7F6UksovwcqEQ7oYXVBejpeL1CtiKVFwNoq9XB5kTiKlVColn+3yPcfwKCNj4H4HoeKc+xMtdd7wow==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux", + "freebsd" + ], "engines": { - "node": ">=0.8.0" + "node": ">=10" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, + "node_modules/@sentry/cli-linux-i686": { + "version": "2.36.6", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.36.6.tgz", + "integrity": "sha512-M1pdxv7eZdGoG1wDpRb28aRUs/qb0C5jAe+a7sWHIg463jRLAahM8NDkv2bRQv0Xhw3JIkEGGvr46mPkQrOuMQ==", + "cpu": [ + "x86", + "ia32" + ], + "optional": true, + "os": [ + "linux", + "freebsd" + ], "engines": { "node": ">=10" } }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@sentry/cli-linux-x64": { + "version": "2.36.6", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.36.6.tgz", + "integrity": "sha512-gVy/zAWY2DEERQ/i3V+oruMas/U29/tsRPcRkB67MIUWbW7W46+c3yH490O+t49qMYYhKYG2YfWoTzW6qMtSlA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux", + "freebsd" + ], + "engines": { + "node": ">=10" } }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@sentry/cli-win32-i686": { + "version": "2.36.6", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.36.6.tgz", + "integrity": "sha512-urH+i+WtPeW8Dund0xY8zObvvbMM0XxeEIUS4oFBCB3EMYHVxgNw+woQUv9Vyv7v+OBjckB/r27nxlwNBj4pbg==", + "cpu": [ + "x86", + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" } }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@sentry/cli-win32-x64": { + "version": "2.36.6", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.36.6.tgz", + "integrity": "sha512-ZauqOqwFAqb/Njyc8Kj2l9Fhbms7T5zB2yu5zwvq1uiqhXqLmsb9mRTF8WJWl9WmO5hwq/GTOEQowvrwK8gblw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" } }, - "node_modules/child-process-promise": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz", - "integrity": "sha512-Fi4aNdqBsr0mv+jgWxcZ/7rAIC2mgihrptyVI4foh/rrjY/3BNjfP9+oaiFx/fzim+1ZyCNBae0DlyfQhSugog==", - "dev": true, + "node_modules/@sentry/core": { + "version": "7.119.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.1.tgz", + "integrity": "sha512-YUNnH7O7paVd+UmpArWCPH4Phlb5LwrkWVqzFWqL3xPyCcTSof2RL8UmvpkTjgYJjJ+NDfq5mPFkqv3aOEn5Sw==", "dependencies": { - "cross-spawn": "^4.0.2", - "node-version": "^1.0.0", - "promise-polyfill": "^6.0.1" + "@sentry/types": "7.119.1", + "@sentry/utils": "7.119.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "optional": true, + "node_modules/@sentry/hub": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.119.0.tgz", + "integrity": "sha512-183h5B/rZosLxpB+ZYOvFdHk0rwZbKskxqKFtcyPbDAfpCUgCass41UTqyxF6aH1qLgCRxX8GcLRF7frIa/SOg==", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@sentry/core": "7.119.0", + "@sentry/types": "7.119.0", + "@sentry/utils": "7.119.0" }, "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=8" } }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "node_modules/@sentry/hub/node_modules/@sentry/core": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.0.tgz", + "integrity": "sha512-CS2kUv9rAJJEjiRat6wle3JATHypB0SyD7pt4cpX5y0dN5dZ1JrF57oLHRMnga9fxRivydHz7tMTuBhSSwhzjw==", "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" + "@sentry/types": "7.119.0", + "@sentry/utils": "7.119.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=8" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "peer": true, + "node_modules/@sentry/hub/node_modules/@sentry/types": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.0.tgz", + "integrity": "sha512-27qQbutDBPKGbuJHROxhIWc1i0HJaGLA90tjMu11wt0E4UNxXRX+UQl4Twu68v4EV3CPvQcEpQfgsViYcXmq+w==", "engines": { - "node": ">=6.0" + "node": ">=8" } }, - "node_modules/chromium-edge-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", - "integrity": "sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==", + "node_modules/@sentry/hub/node_modules/@sentry/utils": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.0.tgz", + "integrity": "sha512-ZwyXexWn2ZIe2bBoYnXJVPc2esCSbKpdc6+0WJa8eutXfHq3FRKg4ohkfCBpfxljQGEfP1+kfin945lA21Ka+A==", "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "node_modules/chromium-edge-launcher/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" + "@sentry/types": "7.119.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "node_modules/@sentry/integrations": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.119.0.tgz", + "integrity": "sha512-OHShvtsRW0A+ZL/ZbMnMqDEtJddPasndjq+1aQXw40mN+zeP7At/V1yPZyFaURy86iX7Ucxw5BtmzuNy7hLyTA==", + "dependencies": { + "@sentry/core": "7.119.0", + "@sentry/types": "7.119.0", + "@sentry/utils": "7.119.0", + "localforage": "^1.8.1" + }, "engines": { "node": ">=8" } }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/@sentry/integrations/node_modules/@sentry/core": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.0.tgz", + "integrity": "sha512-CS2kUv9rAJJEjiRat6wle3JATHypB0SyD7pt4cpX5y0dN5dZ1JrF57oLHRMnga9fxRivydHz7tMTuBhSSwhzjw==", "dependencies": { - "restore-cursor": "^3.1.0" + "@sentry/types": "7.119.0", + "@sentry/utils": "7.119.0" }, "engines": { "node": ">=8" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/@sentry/integrations/node_modules/@sentry/types": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.0.tgz", + "integrity": "sha512-27qQbutDBPKGbuJHROxhIWc1i0HJaGLA90tjMu11wt0E4UNxXRX+UQl4Twu68v4EV3CPvQcEpQfgsViYcXmq+w==", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/@sentry/integrations/node_modules/@sentry/utils": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.0.tgz", + "integrity": "sha512-ZwyXexWn2ZIe2bBoYnXJVPc2esCSbKpdc6+0WJa8eutXfHq3FRKg4ohkfCBpfxljQGEfP1+kfin945lA21Ka+A==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "@sentry/types": "7.119.0" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/@sentry/react": { + "version": "7.119.1", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.119.1.tgz", + "integrity": "sha512-Bri314LnSVm16K3JATgn3Zsq6Uj3M/nIjdUb3nggBw0BMlFWMsyFjUCfmCio5d80KJK/lUjOIxRjzu79M6jOzQ==", + "dependencies": { + "@sentry/browser": "7.119.1", + "@sentry/core": "7.119.1", + "@sentry/types": "7.119.1", + "@sentry/utils": "7.119.1", + "hoist-non-react-statics": "^3.3.2" + }, "engines": { - "node": ">=0.8" + "node": ">=8" + }, + "peerDependencies": { + "react": "15.x || 16.x || 17.x || 18.x" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/@sentry/react-native": { + "version": "5.33.2", + "resolved": "https://registry.npmjs.org/@sentry/react-native/-/react-native-5.33.2.tgz", + "integrity": "sha512-wjNiKYqtcW3JtA6Sg7VJ0xPTaVVMvKtb9R/rtkADjYqsvXFl740YUcwD4TfMHs7UoOvMkP6E941EU1kxGlD6jA==", + "dependencies": { + "@sentry/babel-plugin-component-annotate": "2.20.1", + "@sentry/browser": "7.119.1", + "@sentry/cli": "2.36.6", + "@sentry/core": "7.119.1", + "@sentry/hub": "7.119.0", + "@sentry/integrations": "7.119.0", + "@sentry/react": "7.119.1", + "@sentry/types": "7.119.1", + "@sentry/utils": "7.119.1" + }, + "bin": { + "sentry-expo-upload-sourcemaps": "scripts/expo-upload-sourcemaps.js" + }, + "peerDependencies": { + "expo": ">=49.0.0", + "react": ">=17.0.0", + "react-native": ">=0.65.0" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + } + } + }, + "node_modules/@sentry/replay": { + "version": "7.119.1", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.119.1.tgz", + "integrity": "sha512-4da+ruMEipuAZf35Ybt2StBdV1S+oJbSVccGpnl9w6RoeQoloT4ztR6ML3UcFDTXeTPT1FnHWDCyOfST0O7XMw==", "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "@sentry-internal/tracing": "7.119.1", + "@sentry/core": "7.119.1", + "@sentry/types": "7.119.1", + "@sentry/utils": "7.119.1" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, + "node_modules/@sentry/types": { + "version": "7.119.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.1.tgz", + "integrity": "sha512-4G2mcZNnYzK3pa2PuTq+M2GcwBRY/yy1rF+HfZU+LAPZr98nzq2X3+mJHNJoobeHRkvVh7YZMPi4ogXiIS5VNQ==", "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=8" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "node_modules/@sentry/utils": { + "version": "7.119.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.1.tgz", + "integrity": "sha512-ju/Cvyeu/vkfC5/XBV30UNet5kLEicZmXSyuLwZu95hEbL+foPdxN+re7pCI/eNqfe3B2vz7lvz5afLVOlQ2Hg==", "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" + "@sentry/types": "7.119.1" }, "engines": { - "node": ">=12.5.0" + "node": ">=8" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dependencies": { - "color-name": "1.1.3" + "@hapi/hoek": "^9.0.0" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "type-detect": "4.0.8" } }, - "node_modules/color/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + "node_modules/@stream-io/flat-list-mvcp": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@stream-io/flat-list-mvcp/-/flat-list-mvcp-0.10.3.tgz", + "integrity": "sha512-2ZK8piYlEfKIPZrH8BpZz9uj8HZcUvMCV0X7qSLSAc/vhLOANBfR0SSn0OaWPbqb2mFGAd4FxmLSPp1zKEYuaw==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@testing-library/react-hooks": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz", + "integrity": "sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==", "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" + "@babel/runtime": "^7.12.5", + "react-error-boundary": "^3.1.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/commonmark": { - "name": "@mattermost/commonmark", - "version": "0.30.1-2", - "resolved": "https://registry.npmjs.org/@mattermost/commonmark/-/commonmark-0.30.1-2.tgz", - "integrity": "sha512-r/xhNVt49pEFTjOgmKvjnPNM5RA8OztWsUn3CSQBcXiH2r36QipnR6qxU1hHo3XCteXkYDu9ypn+voA+jaN4Xg==", - "dependencies": { - "entities": "~3.0.1", - "mdurl": "~1.0.1", - "minimist": "~1.2.5", - "string.prototype.repeat": "^1.0.0", - "xregexp": "5.1.0" + "node": ">=12" }, - "bin": { - "commonmark": "bin/commonmark" + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0", + "react": "^16.9.0 || ^17.0.0", + "react-dom": "^16.9.0 || ^17.0.0", + "react-test-renderer": "^16.9.0 || ^17.0.0" }, - "engines": { - "node": "*" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-test-renderer": { + "optional": true + } } }, - "node_modules/commonmark-react-renderer": { - "version": "4.3.5", - "resolved": "git+ssh://git@github.com/mattermost/commonmark-react-renderer.git#81b5d27509652bae50b4b510ede777dd3bd923cf", - "integrity": "sha512-2UYjN/Fix93L6udBsmZqCUggE7e5NA8rXHO2R3Dxs3lwHac3MsOMdEYZPST3Z/CCFc6gyKqWqDtCQXofbHffPA==", + "node_modules/@testing-library/react-native": { + "version": "12.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-12.5.2.tgz", + "integrity": "sha512-utFXq9xVc2D/vZk80YzWPTPTNbVXh7jyLYW+DJ2mlmDhj5GaAKf1abf2Dwc6gitxAWn5R22GO3hBME03W0f82w==", + "dev": true, "license": "MIT", "dependencies": { - "lodash.assign": "^4.2.0", - "lodash.isplainobject": "^4.0.6", - "pascalcase": "^0.1.1", - "xss-filters": "^1.2.6" + "jest-matcher-utils": "^29.7.0", + "pretty-format": "^29.7.0", + "redent": "^3.0.0" }, "peerDependencies": { - "@mattermost/commonmark": "*", - "react": ">=0.14.0" + "jest": ">=28.0.0", + "react": ">=16.8.0", + "react-native": ">=0.59", + "react-test-renderer": ">=16.8.0" + }, + "peerDependenciesMeta": { + "jest": { + "optional": true + } } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "engines": { - "node": ">= 0.6" + "node": ">= 10" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "@babel/types": "^7.0.0" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "@babel/types": "^7.20.7" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/@types/base-64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/base-64/-/base-64-1.0.2.tgz", + "integrity": "sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==", + "dev": true }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "node_modules/@types/commonmark": { + "version": "0.27.9", + "resolved": "https://registry.npmjs.org/@types/commonmark/-/commonmark-0.27.9.tgz", + "integrity": "sha512-d3+57WgyPCcIc6oshmcPkmP4+JqRRot9eeZLsBsutWtIxwWivpoyc2wEcolOp8MyO3ZWN846mMdoR02kdHSMCw==", + "dev": true }, - "node_modules/core-js-compat": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", - "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", + "node_modules/@types/commonmark-react-renderer": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/commonmark-react-renderer/-/commonmark-react-renderer-4.3.4.tgz", + "integrity": "sha512-kuSqn+5YC+hSmKyDUIvwb26K5u6OZTO/EiASrTF35dsLENjpJSvlZ8Ef2I7sxcZ/Wj6PbuTkwRTkwtLc23w6ZA==", + "dev": true, "dependencies": { - "browserslist": "^4.23.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "@types/commonmark": "*", + "@types/react": "*" } }, - "node_modules/core-js-pure": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", - "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } + "node_modules/@types/deep-equal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/deep-equal/-/deep-equal-1.0.4.tgz", + "integrity": "sha512-tqdiS4otQP4KmY0PR3u6KbZ5EWvhNdUoS/jc93UuK23C220lOZ/9TvjfxdPcKvqwwDVtmtSCrnr0p/2dirAxkA==", + "dev": true }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" + "@types/node": "*" } }, - "node_modules/cosmiconfig/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "node_modules/@types/hammerjs": { + "version": "2.0.45", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.45.tgz", + "integrity": "sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==" + }, + "node_modules/@types/hast": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@types/unist": "^2" } }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" } }, - "node_modules/cosmiconfig/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "engines": { - "node": ">=4" - } + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/create-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@types/istanbul-lib-report": "*" } }, - "node_modules/create-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "node_modules/create-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" } }, - "node_modules/create-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, - "node_modules/create-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, - "node_modules/create-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@types/lodash": { + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", - "dev": true, - "dependencies": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } + "node_modules/@types/mime-db": { + "version": "1.43.5", + "resolved": "https://registry.npmjs.org/@types/mime-db/-/mime-db-1.43.5.tgz", + "integrity": "sha512-/bfTiIUTNPUBnwnYvUxXAre5MhD88jgagLEQiQtIASjU+bwxd8kS/ASDA4a8ufd8m0Lheu6eeMJHEUpLHoJ28A==", + "dev": true }, - "node_modules/cross-spawn/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, + "node_modules/@types/node": { + "version": "18.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", + "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "undici-types": "~5.26.4" } }, - "node_modules/cross-spawn/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "@types/node": "*" } }, - "node_modules/cross-spawn/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "node_modules/@types/pako": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.3.tgz", + "integrity": "sha512-bq0hMV9opAcrmE0Byyo0fY3Ew4tgOevJmQ9grUhpXQhYfyLJ1Kqg3P33JT5fdbT2AjeAjR51zqqVjAL/HMkx7Q==", "dev": true }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, - "node_modules/css-selector-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", - "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==" + "node_modules/@types/querystringify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/querystringify/-/querystringify-2.0.2.tgz", + "integrity": "sha512-7d6OQK6pJ//zE32XLK3vI6GHYhBDcYooaRco9cKFGNu59GVatL5+u7rkiAViq44DxDTd/7QQNBWSDHfJGBz/Pw==", + "dev": true }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" + "@types/prop-types": "*", + "csstype": "^3.0.2" } }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node_modules/@types/react-native": { + "version": "0.70.19", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.19.tgz", + "integrity": "sha512-c6WbyCgWTBgKKMESj/8b4w+zWcZSsCforson7UdXtXMecG3MxCinYi6ihhrHVPyUrVzORsvEzK8zg32z4pK6Sg==", + "dependencies": { + "@types/react": "*" } }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "node_modules/@types/react-native-background-timer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/react-native-background-timer/-/react-native-background-timer-2.0.2.tgz", + "integrity": "sha512-cMAep0M5yqUHjiiRPvGiviqiJYdI45KSjbI5ufsIFSQGFwHwrHJC/8yawNhy0G3Gix6fufWLsEj6jC5niUNHiQ==", + "dev": true + }, + "node_modules/@types/react-native-dotenv": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@types/react-native-dotenv/-/react-native-dotenv-0.2.2.tgz", + "integrity": "sha512-YDgO2hdTK5PaxZrIFtVXrjeFOhJ+7A9a8VDUK4QmHCPGIB5i6DroLG9IpItX5qCshz7aPsQfgy9X3w82Otd4HA==", + "dev": true + }, + "node_modules/@types/react-native-share": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@types/react-native-share/-/react-native-share-3.3.8.tgz", + "integrity": "sha512-b77HzennGSky/ZeqmCePYFSga6zuuGrxsnwgXAGzYKwDifdkC0yAtq8ZxnQMRhWM5sos1FGnzpSkuBrd7ZUXCQ==", "dev": true, "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "@types/react": "*", + "react-native": "*" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "node_modules/@types/react-native-vector-icons": { + "version": "6.4.18", + "resolved": "https://registry.npmjs.org/@types/react-native-vector-icons/-/react-native-vector-icons-6.4.18.tgz", + "integrity": "sha512-YGlNWb+k5laTBHd7+uZowB9DpIK3SXUneZqAiKQaj1jnJCZM0x71GDim5JCTMi4IFkhc9m8H/Gm28T5BjyivUw==", + "dependencies": { + "@types/react": "*", + "@types/react-native": "^0.70" + } + }, + "node_modules/@types/react-syntax-highlighter": { + "version": "15.5.13", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.13.tgz", + "integrity": "sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==", "dev": true, "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "@types/react": "*" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "node_modules/@types/shimmer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.5.tgz", + "integrity": "sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww==", + "peer": true }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" + }, + "node_modules/@types/tinycolor2": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", + "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/@types/url-parse": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@types/url-parse/-/url-parse-1.4.11.tgz", + "integrity": "sha512-FKvKIqRaykZtd4n47LbK/W/5fhQQ1X7cxxzG9A48h0BGN+S04NH7ervcCjM8tyR0lyGru83FAHSmw2ObgKoESg==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz", + "integrity": "sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.13.1", + "@typescript-eslint/type-utils": "7.13.1", + "@typescript-eslint/utils": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", + "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", + "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", + "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "ms": "2.1.2" + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">=6.0" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { - "supports-color": { + "typescript": { "optional": true } } }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.1.tgz", + "integrity": "sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.13.1", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/typescript-estree": "7.13.1" + }, "engines": { - "node": ">=10" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", + "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.13.1", + "eslint-visitor-keys": "^3.4.3" + }, "engines": { - "node": ">=0.10" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", + "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.13.1", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/typescript-estree": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { - "babel-plugin-macros": { + "typescript": { "optional": true } } }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", + "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", + "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", + "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", + "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "dev": true, + "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "@typescript-eslint/types": "7.13.1", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecated-react-native-prop-types": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-5.0.0.tgz", - "integrity": "sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==", - "dependencies": { - "@react-native/normalize-colors": "^0.73.0", - "invariant": "^2.2.4", - "prop-types": "^15.8.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "engines": { - "node": ">=18" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true, - "engines": { - "node": ">=4" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.0.tgz", + "integrity": "sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw==", "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/visitor-keys": "8.0.0" + }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/detox": { - "version": "20.20.1", - "resolved": "https://registry.npmjs.org/detox/-/detox-20.20.1.tgz", - "integrity": "sha512-QGdmz+XZhJg1T2ySomdWDTSV7uRXn0WS438XGfC7f7fxePFrPOhxaJioXsDtTeGITWGr78lo2jehwYhRTjh4Pw==", + "node_modules/@typescript-eslint/type-utils": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz", + "integrity": "sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { - "ajv": "^8.6.3", - "bunyan": "^1.8.12", - "bunyan-debug-stream": "^3.1.0", - "caf": "^15.0.1", - "chalk": "^4.0.0", - "child-process-promise": "^2.2.0", - "execa": "^5.1.1", - "find-up": "^5.0.0", - "fs-extra": "^11.0.0", - "funpermaproxy": "^1.1.0", - "glob": "^8.0.3", - "ini": "^1.3.4", - "jest-environment-emit": "^1.0.5", - "json-cycle": "^1.3.0", - "lodash": "^4.17.11", - "multi-sort-stream": "^1.0.3", - "multipipe": "^4.0.0", - "node-ipc": "9.2.1", - "proper-lockfile": "^3.0.2", - "resolve-from": "^5.0.0", - "sanitize-filename": "^1.6.1", - "semver": "^7.0.0", - "serialize-error": "^8.0.1", - "shell-quote": "^1.7.2", - "signal-exit": "^3.0.3", - "stream-json": "^1.7.4", - "strip-ansi": "^6.0.1", - "telnet-client": "1.2.8", - "tempfile": "^2.0.0", - "trace-event-lib": "^1.3.1", - "which": "^1.3.1", - "ws": "^7.0.0", - "yargs": "^17.0.0", - "yargs-parser": "^21.0.0", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "detox": "local-cli/cli.js" + "@typescript-eslint/typescript-estree": "7.13.1", + "@typescript-eslint/utils": "7.13.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">=14" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "jest": "29.x.x || 28.x.x || ^27.2.5" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { - "jest": { + "typescript": { "optional": true } } }, - "node_modules/detox/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", + "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/detox/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", + "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/detox/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", + "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "color-name": "~1.1.4" + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">=7.0.0" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/detox/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/detox/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.1.tgz", + "integrity": "sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.13.1", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/typescript-estree": "7.13.1" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, - "node_modules/detox/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", + "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "@typescript-eslint/types": "7.13.1", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=12" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/detox/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/detox/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/@typescript-eslint/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0.tgz", + "integrity": "sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==", "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/detox/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz", + "integrity": "sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "brace-expansion": "^2.0.1" + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/visitor-keys": "8.0.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/detox/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/@typescript-eslint/utils": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0.tgz", + "integrity": "sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.0.0", + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/typescript-estree": "8.0.0" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/detox/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz", + "integrity": "sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@typescript-eslint/types": "8.0.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=8" - } - }, - "node_modules/detox/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "bin": { - "which": "bin/which" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@urql/core": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", + "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", + "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "@graphql-typed-document-node/core": "^3.1.0", + "wonka": "^4.0.14" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, + "node_modules/@urql/exchange-retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", + "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "@urql/core": ">=2.3.1", + "wonka": "^4.0.14" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "node_modules/@voximplant/react-native-foreground-service": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@voximplant/react-native-foreground-service/-/react-native-foreground-service-3.0.2.tgz", + "integrity": "sha512-ZIyccOAXPqznA1PAVAYlKZ+GI7kXYCuYgH+gmAkhPouyJbkgrSXaCJJzQ+uBkPr4FBa/PuC/yjzK8vf6tJREQA==", + "peerDependencies": { + "react-native": ">= 0.41.2" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "peer": true }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, + "peer": true, "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, - "hasInstallScript": true, - "optional": true, + "peer": true, "dependencies": { - "nan": "^2.14.0" - }, - "engines": { - "node": ">=0.10" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, + "peer": true, "dependencies": { - "readable-stream": "^2.0.2" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/easy-stack": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", - "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.735", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.735.tgz", - "integrity": "sha512-pkYpvwg8VyOTQAeBqZ7jsmpCjko1Qc6We1ZtZCjRyYbT5v4AIUKDy5cQTRotQlSSZmMr8jqpEt6JtOj5k7lR7A==" - }, - "node_modules/eme-encryption-scheme-polyfill": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eme-encryption-scheme-polyfill/-/eme-encryption-scheme-polyfill-2.1.1.tgz", - "integrity": "sha512-njD17wcUrbqCj0ArpLu5zWXtaiupHb/2fIUQGdInf83GlI+Q6mmqaPGLdrke4savKAu15J/z1Tg/ivDgl14g0g==" + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, - "node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, - "node_modules/enhanced-resolve": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", - "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "peer": true, "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/envinfo": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", - "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" } }, - "node_modules/err-code": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", - "integrity": "sha512-CJAN+O0/yA1CKfRn9SXOGctSpEM7DCon/r/5r2eXFMY2zCCJBasFhcM5I+1kh3Ap11FsQCX+vGHceNPvpWKhoA==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, "dependencies": { - "is-arrayish": "^0.2.1" + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" } }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "dependencies": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - }, + "node_modules/@xmldom/xmldom": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", "engines": { - "node": ">= 0.8" + "node": ">=10.0.0" } }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "event-target-shim": "^5.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.5" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { - "get-intrinsic": "^1.2.4" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">= 0.4" + "node": ">=0.4.0" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "license": "MIT", + "peer": true, + "peerDependencies": { + "acorn": "^8" } }, - "node_modules/es-module-lexer": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", - "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "peer": true + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dependencies": { - "es-errors": "^1.3.0" - }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=0.4.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "ajv": "^8.0.0" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "ajv": "^8.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "engines": { - "node": ">=6" + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "node_modules/ansi-fragments/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6" } }, - "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "node_modules/ansi-fragments/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { - "ms": "^2.1.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, + "node_modules/appdirsjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==" + }, + "node_modules/application-config-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", + "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==", + "license": "MIT" + }, + "node_modules/applicationinsights": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-2.7.3.tgz", + "integrity": "sha512-JY8+kTEkjbA+kAVNWDtpfW2lqsrDALfDXuxOs74KLPu2y13fy/9WB52V4LfYVTVcW1/jYOXjTxNS2gPZIDh1iw==", + "peer": true, "dependencies": { - "debug": "^3.2.7" + "@azure/core-auth": "^1.5.0", + "@azure/core-rest-pipeline": "1.10.1", + "@azure/core-util": "1.2.0", + "@azure/opentelemetry-instrumentation-azure-sdk": "^1.0.0-beta.5", + "@microsoft/applicationinsights-web-snippet": "^1.0.1", + "@opentelemetry/api": "^1.4.1", + "@opentelemetry/core": "^1.15.2", + "@opentelemetry/sdk-trace-base": "^1.15.2", + "@opentelemetry/semantic-conventions": "^1.15.2", + "cls-hooked": "^4.2.2", + "continuation-local-storage": "^3.2.1", + "diagnostic-channel": "1.1.1", + "diagnostic-channel-publishers": "1.0.7" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" + }, + "peerDependencies": { + "applicationinsights-native-metrics": "*" }, "peerDependenciesMeta": { - "eslint": { + "applicationinsights-native-metrics": { "optional": true } } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "ms": "^2.1.1" + "sprintf-js": "~1.0.2" } }, - "node_modules/eslint-plugin-eslint-comments": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", - "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", - "dev": true, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dependencies": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" }, "engines": { - "node": ">=6.5.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-plugin-ft-flow": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-ft-flow/-/eslint-plugin-ft-flow-2.0.3.tgz", - "integrity": "sha512-Vbsd/b+LYA99jUbsL6viEUWShFaYQt2YQs3QN3f+aeszOhh2sgdcU0mjzDyD4yyBvMc8qy2uwvBBWfMzEX06tg==", + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" }, "engines": { - "node": ">=12.22.0" + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/eslint-parser": "^7.12.0", - "eslint": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-header": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", - "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", - "dev": true, - "peerDependencies": { - "eslint": ">=7.7.0" + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "peer": true, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-jest": { - "version": "28.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.2.0.tgz", - "integrity": "sha512-yRDti/a+f+SMSmNTiT9/M/MzXGkitl8CfzUxnpoQcTyfq8gUrXMriVcWU36W1X6BZSUoyUCJrDAWWUA2N4hE5g==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "^6.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": "^16.10.0 || ^18.12.0 || >=20.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0", - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", - "dev": true, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" + "tslib": "^2.0.1" }, "engines": { "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "node": ">=4" } }, - "node_modules/eslint-plugin-react-native": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-4.1.0.tgz", - "integrity": "sha512-QLo7rzTBOl43FvVqDdq5Ql9IoElIuTdjrz9SKAXCvULvBoRZ44JGSkx9z4999ZusCsb4rK3gjS8gOGyeYqZv2Q==", + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true, + "license": "MIT" + }, + "node_modules/async-hook-jl": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", + "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", + "peer": true, "dependencies": { - "eslint-plugin-react-native-globals": "^0.1.1" + "stack-chain": "^1.3.7" }, - "peerDependencies": { - "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8" + "engines": { + "node": "^4.7 || >=6.9 || >=7.3" } }, - "node_modules/eslint-plugin-react-native-globals": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", - "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", - "dev": true - }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, + "node_modules/async-listener": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", + "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", + "peer": true, "dependencies": { - "esutils": "^2.0.2" + "semver": "^5.3.0", + "shimmer": "^1.1.0" }, "engines": { - "node": ">=0.10.0" + "node": "<=0.11.8 || >0.11.10" } }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/async-listener/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "engines": { - "node": "*" + "node": ">= 4.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "possible-typed-array-names": "^1.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/eslint/node_modules/ansi-styles": { + "node_modules/babel-jest/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -10214,23 +10781,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/chalk": { + "node_modules/babel-jest/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -10246,7 +10797,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/node_modules/color-convert": { + "node_modules/babel-jest/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -10258,1640 +10809,1708 @@ "node": ">=7.0.0" } }, - "node_modules/eslint/node_modules/color-name": { + "node_modules/babel-jest/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/babel-jest/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 14.15.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/babel-loader/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": ">=10.13.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/babel-loader/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { + "node_modules/babel-loader/node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "yocto-queue": "^1.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/eslint/node_modules/locate-path": { + "node_modules/babel-loader/node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/babel-loader/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/babel-loader/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "find-up": "^6.3.0" }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/babel-loader/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "engines": { - "node": ">=6" + "node_modules/babel-plugin-module-resolver": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz", + "integrity": "sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==", + "dev": true, + "dependencies": { + "find-babel-config": "^2.1.1", + "glob": "^9.3.3", + "pkg-up": "^3.1.0", + "reselect": "^4.1.7", + "resolve": "^1.22.8" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/babel-plugin-module-resolver/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/babel-plugin-module-resolver/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.1", + "semver": "^6.3.1" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dependencies": { - "estraverse": "^5.1.0" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, - "engines": { - "node": ">=0.10" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", + "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", "dependencies": { - "estraverse": "^5.2.0" + "@babel/helper-define-polyfill-provider": "^0.6.1" }, - "engines": { - "node": ">=4.0" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "node_modules/babel-plugin-react-compiler": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-0.0.0.tgz", + "integrity": "sha512-Kigl0V36a/6hLVH7+CCe1CCtU3mFBqBd829V//VtuG7I/pyq+B2QZJqOefd63snQmdfCryNhO9XW1FbGPBvYDA==", + "license": "MIT" + }, + "node_modules/babel-plugin-react-native-web": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.12.tgz", + "integrity": "sha512-eYZ4+P6jNcB37lObWIg0pUbi7+3PKoU1Oie2j0C8UF3cXyXoR74tO2NBjI/FORb2LJyItJZEAmjU5pSaJYEL1w==", + "license": "MIT" + }, + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" } }, - "node_modules/estree-walk": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/estree-walk/-/estree-walk-2.2.0.tgz", - "integrity": "sha512-6gUr3kGNVEfL6pcIiGBrSkhoEQPkv8laQy1lUDpaxT4AvlBxf/UYSueOEb6Wq1cG5Ct6xQSkFCHoJcZlijpUAg==", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/babel-preset-expo": { + "version": "11.0.12", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.12.tgz", + "integrity": "sha512-hUuKdzSo8+H1oXQvKvlHRMHTxl+nN6YhFGlKiIxPa0E+gYfMEp8FnnStc/2Hwmip5rgJzQs6KF63KKRUc75xAg==", + "license": "MIT", + "dependencies": { + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/preset-react": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@react-native/babel-preset": "0.74.85", + "babel-plugin-react-compiler": "^0.0.0-experimental-592953e-20240517", + "babel-plugin-react-native-web": "~0.19.10", + "react-refresh": "^0.14.2" + } + }, + "node_modules/babel-preset-expo/node_modules/@react-native/babel-plugin-codegen": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.85.tgz", + "integrity": "sha512-48TSDclRB5OMXiImiJkLxyCfRyLsqkCgI8buugCZzvXcYslfV7gCvcyFyQldtcOmerV+CK4RAj7QS4hmB5Mr8Q==", + "license": "MIT", + "dependencies": { + "@react-native/codegen": "0.74.85" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/babel-preset-expo/node_modules/@react-native/babel-preset": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.85.tgz", + "integrity": "sha512-yMHUlN8INbK5BBwiBuQMftdWkpm1IgCsoJTKcGD2OpSgZhwwm8RUSvGhdRMzB2w7bsqqBmaEMleGtW6aCR7B9w==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.74.85", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" } }, - "node_modules/event-pubsub": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", - "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", - "dev": true, + "node_modules/babel-preset-expo/node_modules/@react-native/codegen": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.85.tgz", + "integrity": "sha512-N7QwoS4Hq/uQmoH83Ewedy6D0M7xbQsOU3OMcQf0eY3ltQ7S2hd9/R4UTalQWRn1OUJfXR6OG12QJ4FStKgV6Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.0", + "glob": "^7.1.1", + "hermes-parser": "0.19.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, "engines": { - "node": ">=4.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "peer": true, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "license": "MIT", + "dependencies": { + "open": "^8.0.4" + }, "engines": { - "node": ">=0.8.x" + "node": ">=12.0.0" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/better-opn/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", "engines": { - "node": ">= 8" + "node": ">=0.6" } }, - "node_modules/exeunt": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/exeunt/-/exeunt-1.1.0.tgz", - "integrity": "sha512-dd++Yn/0Fp+gtJ04YHov7MeAii+LFivJc6KqnJNfplzLVUkUDrfKoQDTLlCgzcW15vY5hKlHasWeIsQJ8agHsw==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "optional": true, "engines": { - "node": ">=0.10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "node_modules/bplist-creator": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", + "integrity": "sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==", + "license": "MIT", + "dependencies": { + "stream-buffers": "~2.2.0" + } }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, + "node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "big-integer": "1.6.x" }, "engines": { - "node": ">=8.6.0" + "node": ">= 5.10.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/fast-xml-parser": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", - "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "strnum": "^1.0.5" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, + "browserslist": "cli.js" + }, "engines": { - "node": ">= 4.9.1" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "dependencies": { - "format": "^0.2.0" + "fast-json-stable-stringify": "2.x" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">= 6" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dependencies": { - "bser": "2.1.1" + "node-int64": "^0.4.0" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/file-js": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/file-js/-/file-js-0.3.0.tgz", - "integrity": "sha512-nZlX1pxpV6Mt8BghM3Z150bpsCT1zqil97UryusstZLSs9caYAe0Wph2UKPC3awfM2Dq4ri1Sv99KuK4EIImlA==", - "dev": true, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "license": "MIT", "dependencies": { - "bluebird": "^3.4.7", - "minimatch": "^3.0.3", - "proper-lockfile": "^1.2.0" + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, - "node_modules/file-js/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "license": "MIT" }, - "node_modules/file-js/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "license": "MIT" }, - "node_modules/file-js/node_modules/proper-lockfile": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-1.2.0.tgz", - "integrity": "sha512-YNjxtCoY3A+lohlLXWCYrHDhUdfU3MMnuC+ADhloDvJo586LKW23dPrjxGvRGuus05Amcf0cQy6vrjjtbJhWpw==", - "dev": true, - "dependencies": { - "err-code": "^1.0.0", - "extend": "^3.0.0", - "graceful-fs": "^4.1.2", - "retry": "^0.10.0" - } + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/file-js/node_modules/retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ==", - "dev": true, - "engines": { - "node": "*" - } + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "license": "MIT" }, - "node_modules/filehound": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/filehound/-/filehound-1.17.6.tgz", - "integrity": "sha512-5q4zjFkI8W2zLmvbvyvI//K882IpEj6sMNXPUQlk5H6W4Wh3OSSylEAIEmMLELP9G7ileYjTKPXOn0YzzS55Lg==", - "dev": true, - "dependencies": { - "bluebird": "^3.7.2", - "file-js": "0.3.0", - "lodash": "^4.17.21", - "minimatch": "^5.0.0", - "moment": "^2.29.1", - "unit-compare": "^1.0.1" + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" } }, - "node_modules/filehound/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "dependencies": { - "to-regex-range": "^5.0.1" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=8" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", "dependencies": { - "ms": "2.0.0" + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/finalhandler/node_modules/ms": { + "node_modules/caller-callsite/node_modules/callsites": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "engines": { + "node": ">=4" + } }, - "node_modules/find-babel-config": { + "node_modules/caller-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.0.0.tgz", - "integrity": "sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==", - "dev": true, + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", "dependencies": { - "json5": "^2.1.1", - "path-exists": "^4.0.0" + "caller-callsite": "^2.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=4" } }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { - "node": ">=8" - } - }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "dependencies": { - "micromatch": "^4.0.2" + "node": ">=6" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } + "node_modules/caniuse-lite": { + "version": "1.0.30001649", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz", + "integrity": "sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" } }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/flow-enums-runtime": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", - "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" - }, - "node_modules/flow-parser": { - "version": "0.206.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", - "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=0.4.0" + "node": ">=0.8.0" } }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node": ">=10" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.6" + "node": "*" } }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "optional": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=14.14" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12.13.0" } }, - "node_modules/funpermaproxy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/funpermaproxy/-/funpermaproxy-1.1.0.tgz", - "integrity": "sha512-2Sp1hWuO8m5fqeFDusyhKqYPT+7rGLw34N3qonDcdRP8+n7M7Gl/yKp/q7oCxnnJ6pWCectOmLFJpsMU/++KrQ==", + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, + "peer": true, "engines": { - "node": ">=8.3.0" + "node": ">=6.0" } }, - "node_modules/fuse.js": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", - "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==", + "node_modules/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==", + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "node_modules/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { "node": ">=10" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=6" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" + "restore-cursor": "^3.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "node_modules/cls-hooked": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", + "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", + "peer": true, "dependencies": { - "is-glob": "^4.0.1" + "async-hook-jl": "^1.7.6", + "emitter-listener": "^1.0.1", + "semver": "^5.4.1" }, "engines": { - "node": ">= 6" + "node": "^4.7 || >=6.9 || >=7.3 || >=8.2.1" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "peer": true + "node_modules/cls-hooked/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "peer": true, + "bin": { + "semver": "bin/semver" + } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dependencies": { - "brace-expansion": "^1.1.7" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, "engines": { - "node": "*" + "node": ">=12.5.0" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=7.0.0" } }, - "node_modules/globby/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dependencies": { - "get-intrinsic": "^1.1.3" + "delayed-stream": "~1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/commonmark": { + "name": "@mattermost/commonmark", + "version": "0.30.1-3", + "resolved": "https://registry.npmjs.org/@mattermost/commonmark/-/commonmark-0.30.1-3.tgz", + "integrity": "sha512-Kjsl/sZmb6R6PtpPVIifPfqBMrKs7z6Tukb1TJl/S0LfC5uNici3yol4waGxhGsJuvCF2kZqStwVQP7ieUbAgw==", "dependencies": { - "es-define-property": "^1.0.0" + "entities": "~3.0.1", + "mdurl": "~1.0.1", + "minimist": "~1.2.5", + "string.prototype.repeat": "^1.0.0", + "xregexp": "5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "commonmark": "bin/commonmark" + }, + "engines": { + "node": "*" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" + "node_modules/commonmark-react-renderer": { + "version": "4.3.5", + "resolved": "git+ssh://git@github.com/mattermost/commonmark-react-renderer.git#81b5d27509652bae50b4b510ede777dd3bd923cf", + "integrity": "sha512-2UYjN/Fix93L6udBsmZqCUggE7e5NA8rXHO2R3Dxs3lwHac3MsOMdEYZPST3Z/CCFc6gyKqWqDtCQXofbHffPA==", + "license": "MIT", + "dependencies": { + "lodash.assign": "^4.2.0", + "lodash.isplainobject": "^4.0.6", + "pascalcase": "^0.1.1", + "xss-filters": "^1.2.6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@mattermost/commonmark": "*", + "react": ">=0.14.0" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, + "node_modules/component-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", + "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==", + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dependencies": { - "has-symbols": "^1.0.3" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dependencies": { - "function-bind": "^1.1.2" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8.0" } }, - "node_modules/hast-util-from-selector": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-selector/-/hast-util-from-selector-2.0.1.tgz", - "integrity": "sha512-oKhgO8/r9HMeNXJspY3gFD6VqCWNN9jpIHPkcPl/qQpelbigKB+5jC9k36M+w1kmEPvd386+PU5LEsxJzCRZMw==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "@types/hast": "^2.0.0", - "css-selector-parser": "^1.0.0", - "hastscript": "^7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "ms": "2.0.0" } }, - "node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dependencies": { - "@types/hast": "^2.0.0" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "ms": "2.0.0" } }, - "node_modules/hermes-estree": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", - "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==" + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/hermes-parser": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", - "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", + "node_modules/continuation-local-storage": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", + "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", + "peer": true, "dependencies": { - "hermes-estree": "0.15.0" + "async-listener": "^0.6.0", + "emitter-listener": "^1.1.1" } }, - "node_modules/hermes-profile-transformer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", - "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/core-js-compat": { + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", + "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", + "license": "MIT", "dependencies": { - "source-map": "^0.7.3" + "browserslist": "^4.23.3" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/hermes-profile-transformer/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "engines": { - "node": "*" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" + "node_modules/core-js-pure": { + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", + "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, - "node_modules/http-cookie-agent": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-6.0.3.tgz", - "integrity": "sha512-6JdymEgWgsg9VQ5VN9FGpRRcivyu4WdM0Ud3kW+Q0PB7knt0EFtlhNPU8wCuscXLfIEI5y6jEMdFTBODNsJR6g==", - "dev": true, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dependencies": { - "agent-base": "^7.1.1" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" }, "engines": { - "node": ">=18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/3846masa" - }, - "peerDependencies": { - "deasync": "^0.1.26", - "tough-cookie": "^4.0.0", - "undici": "^5.11.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "deasync": { - "optional": true - }, - "undici": { - "optional": true - } + "node": ">=4" } }, - "node_modules/http-errors": { + "node_modules/cosmiconfig/node_modules/import-fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dependencies": { - "agent-base": "6", - "debug": "4" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/https-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "engines": { - "node": ">= 6.0.0" + "node": ">=4" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, "engines": { - "node": ">=10.17.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "bin": { - "husky": "bin.mjs" + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/typicode" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16.x" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/create-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=7.0.0" } }, - "node_modules/import-fresh/node_modules/resolve-from": { + "node_modules/create-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/create-jest/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/create-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node-fetch": "^2.6.12" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "license": "BSD-3-Clause", "engines": { - "node": ">=0.8.19" + "node": "*" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "node_modules/css-selector-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", + "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==" }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8.0.0" } }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "engines": { - "node": ">= 0.10" - } - }, - "node_modules/intl-messageformat": { - "version": "10.5.11", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.11.tgz", - "integrity": "sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg==", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/fast-memoize": "2.2.0", - "@formatjs/icu-messageformat-parser": "2.7.6", - "tslib": "^2.4.0" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "node": ">= 6" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "cssom": "~0.3.6" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/dag-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "node_modules/data-urls/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "punycode": "^2.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, - "optional": true, "dependencies": { - "binary-extensions": "^2.0.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -11900,10 +12519,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, "engines": { "node": ">= 0.4" }, @@ -11911,23 +12535,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dependencies": { - "is-typed-array": "^1.1.13" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -11936,213 +12551,260 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/dayjs": { + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "has-tostringtag": "^1.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.10" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, "engines": { "node": ">=6" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "node_modules/default-gateway/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/default-gateway/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/default-gateway/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "engines": { - "node": ">= 0.4" + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/default-gateway/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" + "node_modules/default-gateway/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/default-gateway/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dependencies": { - "isobject": "^3.0.1" + "clone": "^1.0.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-regex": { + "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -12151,62 +12813,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dependencies": { - "has-symbols": "^1.0.2" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -12215,24 +12838,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "engines": { "node": ">=10" }, @@ -12240,1161 +12860,1138 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "node_modules/del/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" } }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/deprecated-react-native-prop-types": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-5.0.0.tgz", + "integrity": "sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==", + "peer": true, "dependencies": { - "is-docker": "^2.0.0" + "@react-native/normalize-colors": "^0.73.0", + "invariant": "^2.2.4", + "prop-types": "^15.8.1" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "node_modules/deprecated-react-native-prop-types/node_modules/@react-native/normalize-colors": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz", + "integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==", + "peer": true }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" + "engines": { + "node": ">=4" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/diagnostic-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-1.1.1.tgz", + "integrity": "sha512-r2HV5qFkUICyoaKlBEpLKHjxMXATUf/l+h8UZPGBHGLy4DDiY2sOLcIctax4eRnTw5wH2jTMExLntGPJ8eOJxw==", + "peer": true, + "dependencies": { + "semver": "^7.5.3" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/diagnostic-channel-publishers": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-1.0.7.tgz", + "integrity": "sha512-SEECbY5AiVt6DfLkhkaHNeshg1CogdLLANA8xlG/TKvS+XUgvIKl7VspJGYiEdL5OUyzMVnr7o0AwB7f+/Mjtg==", + "peer": true, + "peerDependencies": { + "diagnostic-channel": "*" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "semver": "^7.5.3" + "esutils": "^2.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.0.0" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { - "has-flag": "^4.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "node": ">=0.12" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/jail-monkey": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jail-monkey/-/jail-monkey-2.8.0.tgz", - "integrity": "sha512-mz0sldKOEnt7qpqLLYM9Rwq9zGuGtj5nihz87KWBSy6PR9eu0cmyPkW3b+Exw4iVivcb2bFf6uVq0Q9aNgdIhw==" + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=12" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "domelementtype": "^2.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dependencies": { - "color-convert": "^2.0.1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://dotenvx.com" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/dotenv-expand": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", + "license": "BSD-2-Clause", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "dotenv": "^16.4.4" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://dotenvx.com" } }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "color-name": "~1.1.4" + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/electron-to-chromium": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "license": "ISC" }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", + "peer": true, + "dependencies": { + "shimmer": "^1.2.0" + } + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/jest-circus/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=0.12" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "node_modules/envinfo": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", + "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", + "bin": { + "envinfo": "dist/cli.js" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "license": "MIT" }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha512-CJAN+O0/yA1CKfRn9SXOGctSpEM7DCon/r/5r2eXFMY2zCCJBasFhcM5I+1kh3Ap11FsQCX+vGHceNPvpWKhoA==", "dev": true }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "stackframe": "^1.3.4" } }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "accepts": "~1.3.7", + "escape-html": "~1.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dependencies": { - "color-convert": "^2.0.1" + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/es-module-lexer": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "dev": true, + "peer": true + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dependencies": { - "has-flag": "^4.0.0" + "es-errors": "^1.3.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "hasown": "^2.0.0" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, - "node_modules/jest-diff/node_modules/has-flag": { + "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "node": ">=10" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "dependencies": { - "detect-newline": "^3.0.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "bin": { + "eslint-config-prettier": "bin/cli.js" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "ms": "^2.1.1" } }, - "node_modules/jest-environment-emit": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/jest-environment-emit/-/jest-environment-emit-1.0.7.tgz", - "integrity": "sha512-/0AYqbL3zrfRTtGyzTZwgRxQZiDXEM8ZUfY7Uscla/XGs9vszx4f0XTSZqAk3CQaiwYAoKvFZkB2vSKm1Q08fQ==", + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { - "bunyamin": "^1.5.2", - "bunyan": "^2.0.5", - "bunyan-debug-stream": "^3.1.0", - "funpermaproxy": "^1.1.0", - "lodash.merge": "^4.6.2", - "node-ipc": "9.2.1", - "strip-ansi": "^6.0.0", - "tslib": "^2.5.3" + "debug": "^3.2.7" }, "engines": { - "node": ">=16.14.0" - }, - "peerDependencies": { - "@jest/environment": ">=27.2.5", - "@jest/types": ">=27.2.5", - "jest": ">=27.2.5", - "jest-environment-jsdom": ">=27.2.5", - "jest-environment-node": ">=27.2.5" + "node": ">=4" }, "peerDependenciesMeta": { - "@jest/environment": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "jest-environment-node": { + "eslint": { "optional": true } } }, - "node_modules/jest-environment-emit/node_modules/bunyan": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-2.0.5.tgz", - "integrity": "sha512-Jvl74TdxCN6rSP9W1I6+UOUtwslTDqsSFkDqZlFb/ilaSvQ+bZAnXT/GT97IZ5L+Vph0joPZPhxUyn6FLNmFAA==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": [ - "node >=0.10.0" - ], "dependencies": { - "exeunt": "1.1.0" - }, - "bin": { - "bunyan": "bin/bunyan" - }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" + "ms": "^2.1.1" } }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "node_modules/eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "dev": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.8.0" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "node_modules/eslint-plugin-ft-flow": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-ft-flow/-/eslint-plugin-ft-flow-2.0.3.tgz", + "integrity": "sha512-Vbsd/b+LYA99jUbsL6viEUWShFaYQt2YQs3QN3f+aeszOhh2sgdcU0mjzDyD4yyBvMc8qy2uwvBBWfMzEX06tg==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12.22.0" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "peerDependencies": { + "@babel/eslint-parser": "^7.12.0", + "eslint": "^8.1.0" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "node_modules/eslint-plugin-header": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", + "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", + "dev": true, + "peerDependencies": { + "eslint": ">=7.7.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "ms": "^2.1.1" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=7.0.0" + "node": "*" } }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "engines": { - "node": ">=8" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint-plugin-jest": { + "version": "28.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.7.0.tgz", + "integrity": "sha512-fzPGN7awL2ftVRQh/bsCi+16ArUZWujZnD1b8EGJqy8nr4//7tZ3BIdc/9edcJBtB3hpci3GtdMNFVDwHU0Eag==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } } }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "prettier-linter-helpers": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint-plugin-react": { + "version": "7.35.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", + "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", + "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint-plugin-react-native": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-4.1.0.tgz", + "integrity": "sha512-QLo7rzTBOl43FvVqDdq5Ql9IoElIuTdjrz9SKAXCvULvBoRZ44JGSkx9z4999ZusCsb4rK3gjS8gOGyeYqZv2Q==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "eslint-plugin-react-native-globals": "^0.1.1" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } + "node_modules/eslint-plugin-react-native-globals": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", + "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", + "dev": true }, - "node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "peerDependencies": { - "jest-resolve": "*" + "bin": { + "resolve": "bin/resolve" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.0.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4.0" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "node_modules/jest-resolve/node_modules/chalk": { + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -13410,7 +14007,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-resolve/node_modules/color-convert": { + "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -13422,143 +14019,167 @@ "node": ">=7.0.0" } }, - "node_modules/jest-resolve/node_modules/color-name": { + "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-resolve/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "is-glob": "^4.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10.13.0" } }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=7.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/jest-runner/node_modules/supports-color": { + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -13570,414 +14191,380 @@ "node": ">=8" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10" } }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/jest-runtime/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/estree-walk": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/estree-walk/-/estree-walk-2.2.0.tgz", + "integrity": "sha512-6gUr3kGNVEfL6pcIiGBrSkhoEQPkv8laQy1lUDpaxT4AvlBxf/UYSueOEb6Wq1cG5Ct6xQSkFCHoJcZlijpUAg==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", + "license": "MIT" + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/execa/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { - "color-name": "~1.1.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 8" } }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { + "node_modules/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/expo": { + "version": "51.0.24", + "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.24.tgz", + "integrity": "sha512-HoOuNIWXzS6Gxifcb0N+qRt5K6iR9YitQaWIVNB8elyupvQdyI566IMgMBiO45NgpO5es0sfFNNBasxBHLkbUw==", + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@babel/runtime": "^7.20.0", + "@expo/cli": "0.18.26", + "@expo/config": "9.0.3", + "@expo/config-plugins": "8.0.8", + "@expo/metro-config": "0.18.10", + "@expo/vector-icons": "^14.0.0", + "babel-preset-expo": "~11.0.12", + "expo-asset": "~10.0.10", + "expo-file-system": "~17.0.1", + "expo-font": "~12.0.9", + "expo-keep-awake": "~13.0.2", + "expo-modules-autolinking": "1.11.1", + "expo-modules-core": "1.12.20", + "fbemitter": "^3.0.0", + "whatwg-url-without-unicode": "8.0.0-3" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bin": { + "expo": "bin/cli" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node_modules/expo-application": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-5.9.1.tgz", + "integrity": "sha512-uAfLBNZNahnDZLRU41ZFmNSKtetHUT9Ua557/q189ua0AWV7pQjoVAx49E4953feuvqc9swtU3ScZ/hN1XO/FQ==", + "peerDependencies": { + "expo": "*" } }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/expo-asset": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-10.0.10.tgz", + "integrity": "sha512-0qoTIihB79k+wGus9wy0JMKq7DdenziVx3iUkGvMAy2azscSgWH6bd2gJ9CGnhC6JRd3qTMFBL0ou/fx7WZl7A==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "expo-constants": "~16.0.0", + "invariant": "^2.2.4", + "md5-file": "^3.2.3" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "peerDependencies": { + "expo": "*" } }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/expo-constants": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-16.0.2.tgz", + "integrity": "sha512-9tNY3OVO0jfiMzl7ngb6IOyR5VFzNoN5OOazUWoeGfmMqVB5kltTemRvKraK9JRbBKIw+SOYLEmF0sEqgFZ6OQ==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@expo/config": "~9.0.0", + "@expo/env": "~0.3.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "expo": "*" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/expo-crypto": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-13.0.2.tgz", + "integrity": "sha512-7f/IMPYJZkBM21LNEMXGrNo/0uXSVfZTwufUdpNKedJR0fm5fH4DCSN79ZddlV26nF90PuXjK2inIbI6lb0qRA==", "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "base64-js": "^1.3.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "expo": "*" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/expo-device": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/expo-device/-/expo-device-6.0.2.tgz", + "integrity": "sha512-sCt91CuTmAuMXX4SlFOn4lIos2UIr8vb0jDstDDZXys6kErcj0uynC7bQAMreU5uRUTKMAl4MAMpKt9ufCXPBw==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "ua-parser-js": "^0.7.33" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "expo": "*" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/expo-device/node_modules/ua-parser-js": { + "version": "0.7.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.37.tgz", + "integrity": "sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node_modules/expo-file-system": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-17.0.1.tgz", + "integrity": "sha512-dYpnZJqTGj6HCYJyXAgpFkQWsiCH3HY1ek2cFZVHFoEc5tLz9gmdEgTF6nFHurvmvfmXqxi7a5CXyVm0aFYJBw==", + "peerDependencies": { + "expo": "*" } }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/expo-font": { + "version": "12.0.9", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-12.0.9.tgz", + "integrity": "sha512-seTCyf0tbgkAnp3ZI9ZfK9QVtURQUgFnuj+GuJ5TSnN0XsOtVe1s2RxTvmMgkfuvfkzcjJ69gyRpsZS1cC8hjw==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "fontfaceobserver": "^2.1.0" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "expo": "*" } }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/expo-image": { + "version": "1.12.13", + "resolved": "https://registry.npmjs.org/expo-image/-/expo-image-1.12.13.tgz", + "integrity": "sha512-Dmuc5qmkIsl1nFj8C3Ux3wL2bN4QYW4dM9fkGA8kYiP5Fxf1lT36ldkHk2O2lPFRSFJDvLxT8Tz+7GTko5fzwQ==", + "license": "MIT", + "peerDependencies": { + "expo": "*" + } }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "node_modules/expo-keep-awake": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-13.0.2.tgz", + "integrity": "sha512-kKiwkVg/bY0AJ5q1Pxnm/GvpeB6hbNJhcFsoOWDh2NlpibhCLaHL826KHUM+WsnJRbVRxJ+K9vbPRHEMvFpVyw==", + "peerDependencies": { + "expo": "*" } }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node_modules/expo-linear-gradient": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-linear-gradient/-/expo-linear-gradient-13.0.2.tgz", + "integrity": "sha512-EDcILUjRKu4P1rtWcwciN6CSyGtH7Bq4ll3oTRV7h3h8oSzSilH1g6z7kTAMlacPBKvMnkkWOGzW6KtgMKEiTg==", + "peerDependencies": { + "expo": "*" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, + "node_modules/expo-modules-autolinking": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz", + "integrity": "sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw==", + "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { + "node_modules/expo-modules-autolinking/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13988,11 +14575,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/chalk": { + "node_modules/expo-modules-autolinking/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14004,11 +14591,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/color-convert": { + "node_modules/expo-modules-autolinking/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14016,444 +14603,438 @@ "node": ">=7.0.0" } }, - "node_modules/jest-watcher/node_modules/color-name": { + "node_modules/expo-modules-autolinking/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "license": "MIT" }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "node_modules/expo-modules-autolinking/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/expo-modules-autolinking/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/expo-modules-autolinking/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-worker/node_modules/has-flag": { + "node_modules/expo-modules-autolinking/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/expo-modules-autolinking/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jetifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-2.0.0.tgz", - "integrity": "sha512-J4Au9KuT74te+PCCCHKgAjyLlEa+2VyIAEPNCdE5aNkAJ6FAJcAqcdzEkSnzNksIa9NkGmC4tPiClk2e7tCJuQ==", - "dev": true, - "bin": { - "jetifier": "bin/jetify", - "jetifier-standalone": "bin/jetifier-standalone", - "jetify": "bin/jetify" + "node_modules/expo-modules-autolinking/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/joi": { - "version": "17.12.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.3.tgz", - "integrity": "sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g==", + "node_modules/expo-modules-autolinking/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/js-message": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", - "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", - "dev": true, - "engines": { - "node": ">=0.6.0" + "node_modules/expo-modules-core": { + "version": "1.12.20", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.20.tgz", + "integrity": "sha512-CCXjlgT8lDAufgt912P1W7TwD+KAylfIttc1Doh1a0hAfkdkUsDRmrgthnYrrxEo2ECVpbaB71Epp1bnZ1rRrA==", + "license": "MIT", + "dependencies": { + "invariant": "^2.2.4" } }, - "node_modules/js-queue": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", - "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", - "dev": true, + "node_modules/expo-store-review": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/expo-store-review/-/expo-store-review-7.0.2.tgz", + "integrity": "sha512-bXBXPv2KhfE9Ct14vof9Y1kAGlTFXmGdOLPToyg/eM6lMSALwyrLMkJ3Ba2XCI8PzKGKlx/+Yx5bImrZs4cUwg==", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-video-thumbnails": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/expo-video-thumbnails/-/expo-video-thumbnails-8.0.0.tgz", + "integrity": "sha512-VWVkBjn8DRodRVCDDaFxnQrOaPNzTeEcGBvPWcAv9WQ4D+TY0KCl36x4gUf9HUfhhH8uwZdmP1g1rSFtqCTGLg==", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-web-browser": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-13.0.3.tgz", + "integrity": "sha512-HXb7y82ApVJtqk8tManyudtTrCtx8xcUnVzmJECeHCB0SsWSQ+penVLZxJkcyATWoJOsFMnfVSVdrTcpKKGszQ==", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { - "easy-stack": "^1.0.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=1.0.0" + "node": ">=8.6.0" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "strnum": "^1.0.5" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "fxparser": "src/cli/cli.js" } }, - "node_modules/jsc-android": { - "version": "250231.0.0", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", - "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==" - }, - "node_modules/jsc-safe-url": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", - "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==" + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } }, - "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "reusify": "^1.0.4" } }, - "node_modules/jscodeshift/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "format": "^0.2.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/jscodeshift/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "bser": "2.1.1" } }, - "node_modules/jscodeshift/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "fbjs": "^3.0.0" } }, - "node_modules/jscodeshift/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } }, - "node_modules/jscodeshift/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/fbjs/node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" } }, - "node_modules/jscodeshift/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/fetch-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", + "license": "MIT" + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "node_modules/file-js": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/file-js/-/file-js-0.3.0.tgz", + "integrity": "sha512-nZlX1pxpV6Mt8BghM3Z150bpsCT1zqil97UryusstZLSs9caYAe0Wph2UKPC3awfM2Dq4ri1Sv99KuK4EIImlA==", + "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" + "bluebird": "^3.4.7", + "minimatch": "^3.0.3", + "proper-lockfile": "^1.2.0" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-cycle": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.5.0.tgz", - "integrity": "sha512-GOehvd5PO2FeZ5T4c+RxobeT5a1PiGpF4u9/3+UvrMU4bhnVqzJY7hm39wg8PDCqkU91fWGH8qjWR4bn+wgq9w==", + "node_modules/file-js/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "engines": { - "node": ">= 4" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/json-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", - "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", + "node_modules/file-js/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "isarray": "^2.0.5", - "jsonify": "^0.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/file-js/node_modules/proper-lockfile": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-1.2.0.tgz", + "integrity": "sha512-YNjxtCoY3A+lohlLXWCYrHDhUdfU3MMnuC+ADhloDvJo586LKW23dPrjxGvRGuus05Amcf0cQy6vrjjtbJhWpw==", "dev": true, "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "err-code": "^1.0.0", + "extend": "^3.0.0", + "graceful-fs": "^4.1.2", + "retry": "^0.10.0" } }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "node_modules/file-js/node_modules/retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "*" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "node_modules/filehound": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/filehound/-/filehound-1.17.6.tgz", + "integrity": "sha512-5q4zjFkI8W2zLmvbvyvI//K882IpEj6sMNXPUQlk5H6W4Wh3OSSylEAIEmMLELP9G7ileYjTKPXOn0YzzS55Lg==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" + "bluebird": "^3.7.2", + "file-js": "0.3.0", + "lodash": "^4.17.21", + "minimatch": "^5.0.0", + "moment": "^2.29.1", + "unit-compare": "^1.0.1" } }, - "node_modules/keymirror": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/keymirror/-/keymirror-0.1.1.tgz", - "integrity": "sha512-vIkZAFWoDijgQT/Nvl2AHCMmnegN2ehgTPYuyy2hWQkQSntI0S7ESYqdLkoSe1HyEBFHHkCgSIvVdSEiWwKvCg==" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/filehound/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" + "minimatch": "^5.0.1" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "dependencies": { - "immediate": "~3.0.5" + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lighthouse-logger": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/lighthouse-logger/node_modules/debug": { + "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", @@ -14461,1288 +15042,1220 @@ "ms": "2.0.0" } }, - "node_modules/lighthouse-logger/node_modules/ms": { + "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "node_modules/find-babel-config": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.1.1.tgz", + "integrity": "sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA==", "dev": true, - "peer": true, - "engines": { - "node": ">=6.11.5" + "dependencies": { + "json5": "^2.2.3", + "path-exists": "^4.0.0" } }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dependencies": { - "lie": "3.1.1" + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "p-locate": "^4.1.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dependencies": { + "micromatch": "^4.0.2" + } }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, + "node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.0" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/fontfaceobserver": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", + "license": "BSD-2-Clause" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "is-callable": "^1.1.3" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "license": "ISC", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 8" } }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "has-flag": "^4.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/logkitty": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", - "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "dependencies": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - }, - "bin": { - "logkitty": "bin/logkitty.js" + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" } }, - "node_modules/logkitty/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/logkitty/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/logkitty/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "minipass": "^7.0.3" }, "engines": { - "node": ">=7.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/logkitty/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/logkitty/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/logkitty/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/logkitty/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/logkitty/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/logkitty/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lokijs": { - "name": "@nozbe/lokijs", - "version": "1.5.12-wmelon6", - "resolved": "https://registry.npmjs.org/@nozbe/lokijs/-/lokijs-1.5.12-wmelon6.tgz", - "integrity": "sha512-GXsaqY8qTJ6xdCrGyno2t+ON2aj6PrUDdvhbrkxK/0Fp12C4FGvDg1wS+voLU9BANYHEnr7KRWfItDZnQkjoAg==" + "node_modules/fuse.js": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", + "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==", + "engines": { + "node": ">=10" + } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/lowlight": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", - "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { - "fault": "^1.0.0", - "highlight.js": "~10.7.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/get-monorepo-packages": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-monorepo-packages/-/get-monorepo-packages-1.2.0.tgz", + "integrity": "sha512-aDP6tH+eM3EuVSp3YyCutOcFS4Y9AhRRH9FAd+cjtR/g63Hx+DCXdKoP1ViRPUJz5wm+BOEXB4FhoffGHxJ7jQ==", + "peer": true, "dependencies": { - "yallist": "^3.0.2" + "globby": "^7.1.1", + "load-json-file": "^4.0.0" } }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/get-monorepo-packages/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "peer": true, "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "array-uniq": "^1.0.1" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" + "node_modules/get-monorepo-packages/node_modules/dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "peer": true, + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "node_modules/get-monorepo-packages/node_modules/globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", + "peer": true, "dependencies": { - "tmpl": "1.0.5" + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/marky": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", - "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" + "node_modules/get-monorepo-packages/node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "peer": true }, - "node_modules/mathjax-full": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz", - "integrity": "sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==", + "node_modules/get-monorepo-packages/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "peer": true, "dependencies": { - "esm": "^3.2.25", - "mhchemparser": "^4.1.0", - "mj-context-menu": "^0.6.1", - "speech-rule-engine": "^4.0.6" + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + "node_modules/get-monorepo-packages/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "peer": true, + "engines": { + "node": ">=4" + } }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + "node_modules/get-monorepo-packages/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.8.tgz", - "integrity": "sha512-in7S0W11mg+RNmcXw+2d9S3zBGmCARDxIwoXJAmLUQOQoYsRP3cpGzyJtc7WOw8+FXfpgXvceD0u+PZIHXEL7g==", + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "accepts": "^1.3.7", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.20.1", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^29.6.3", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.8", - "metro-cache": "0.80.8", - "metro-cache-key": "0.80.8", - "metro-config": "0.80.8", - "metro-core": "0.80.8", - "metro-file-map": "0.80.8", - "metro-resolver": "0.80.8", - "metro-runtime": "0.80.8", - "metro-source-map": "0.80.8", - "metro-symbolicate": "0.80.8", - "metro-transform-plugins": "0.80.8", - "metro-transform-worker": "0.80.8", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^3.0.2", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "throat": "^5.0.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, - "bin": { - "metro": "src/cli.js" + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getenv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", + "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/metro-babel-transformer": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.8.tgz", - "integrity": "sha512-TTzNwRZb2xxyv4J/+yqgtDAP2qVqH3sahsnFu6Xv4SkLqzrivtlnyUbaeTdJ9JjtADJUEjCbgbFgUVafrXdR9Q==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "@babel/core": "^7.20.0", - "hermes-parser": "0.20.1", - "nullthrows": "^1.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=18" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", - "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", - "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "hermes-estree": "0.20.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/metro-cache": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.8.tgz", - "integrity": "sha512-5svz+89wSyLo7BxdiPDlwDTgcB9kwhNMfNhiBZPNQQs1vLFXxOkILwQiV5F2EwYT9DEr6OPZ0hnJkZfRQ8lDYQ==", + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "metro-core": "0.80.8", - "rimraf": "^3.0.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/metro-cache-key": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.8.tgz", - "integrity": "sha512-qWKzxrLsRQK5m3oH8ePecqCc+7PEhR03cJE6Z6AxAj0idi99dHOSitTmY0dclXVB9vP2tQIAE8uTd8xkYGk8fA==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/metro-config": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.8.tgz", - "integrity": "sha512-VGQJpfJawtwRzGzGXVUoohpIkB0iPom4DmSbAppKfumdhtLA8uVeEPp2GM61kL9hRvdbMhdWA7T+hZFDlo4mJA==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dependencies": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "jest-validate": "^29.6.3", - "metro": "0.80.8", - "metro-cache": "0.80.8", - "metro-core": "0.80.8", - "metro-runtime": "0.80.8" + "define-properties": "^1.1.3" }, "engines": { - "node": ">=18" - } - }, - "node_modules/metro-core": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.8.tgz", - "integrity": "sha512-g6lud55TXeISRTleW6SHuPFZHtYrpwNqbyFIVd9j9Ofrb5IReiHp9Zl8xkAfZQp8v6ZVgyXD7c130QTsCz+vBw==", - "dependencies": { - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.8" + "node": ">= 0.4" }, - "engines": { - "node": ">=18" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/metro-file-map": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.8.tgz", - "integrity": "sha512-eQXMFM9ogTfDs2POq7DT2dnG7rayZcoEgRbHPXvhUWkVwiKkro2ngcBE++ck/7A36Cj5Ljo79SOkYwHaWUDYDw==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.6.3", - "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro-file-map/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/globby/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" } }, - "node_modules/metro-file-map/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/metro-minify-terser": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.8.tgz", - "integrity": "sha512-y8sUFjVvdeUIINDuW1sejnIjkZfEF+7SmQo0EIpYbWmwh+kq/WMj74yVaBWuqNjirmUp1YNfi3alT67wlbBWBQ==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { - "terser": "^5.15.0" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">=18" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/metro-resolver": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.8.tgz", - "integrity": "sha512-JdtoJkP27GGoZ2HJlEsxs+zO7jnDUCRrmwXJozTlIuzLHMRrxgIRRby9fTCbMhaxq+iA9c+wzm3iFb4NhPmLbQ==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 10.x" } }, - "node_modules/metro-runtime": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.8.tgz", - "integrity": "sha512-2oScjfv6Yb79PelU1+p8SVrCMW9ZjgEiipxq7jMRn8mbbtWzyv3g8Mkwr+KwOoDFI/61hYPUbY8cUnu278+x1g==", + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.0.0" + "tslib": "^2.1.0" }, "engines": { - "node": ">=18" - } - }, - "node_modules/metro-source-map": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.8.tgz", - "integrity": "sha512-+OVISBkPNxjD4eEKhblRpBf463nTMk3KMEeYS8Z4xM/z3qujGJGSsWUGRtH27+c6zElaSGtZFiDMshEb8mMKQg==", - "dependencies": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.80.8", - "nullthrows": "^1.1.1", - "ob1": "0.80.8", - "source-map": "^0.5.6", - "vlq": "^1.0.0" + "node": ">=10" }, - "engines": { - "node": ">=18" + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/metro-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/metro-symbolicate": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.8.tgz", - "integrity": "sha512-nwhYySk79jQhwjL9QmOUo4wS+/0Au9joEryDWw7uj4kz2yvw1uBjwmlql3BprQCBzRdB3fcqOP8kO8Es+vE31g==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.80.8", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" + "es-define-property": "^1.0.0" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/metro-symbolicate/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/metro-transform-plugins": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.8.tgz", - "integrity": "sha512-sSu8VPL9Od7w98MftCOkQ1UDeySWbsIAS5I54rW22BVpPnI3fQ42srvqMLaJUQPjLehUanq8St6OMBCBgH/UWw==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "nullthrows": "^1.1.1" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/metro-transform-worker": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.8.tgz", - "integrity": "sha512-+4FG3TQk3BTbNqGkFb2uCaxYTfsbuFOCKMMURbwu0ehCP8ZJuTUramkaNZoATS49NSAkRgUltgmBa4YaKZ5mqw==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "metro": "0.80.8", - "metro-babel-transformer": "0.80.8", - "metro-cache": "0.80.8", - "metro-cache-key": "0.80.8", - "metro-minify-terser": "0.80.8", - "metro-source-map": "0.80.8", - "metro-transform-plugins": "0.80.8", - "nullthrows": "^1.1.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=18" + "node": ">= 0.4" } }, - "node_modules/metro/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/hast-util-from-selector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-selector/-/hast-util-from-selector-2.0.1.tgz", + "integrity": "sha512-oKhgO8/r9HMeNXJspY3gFD6VqCWNN9jpIHPkcPl/qQpelbigKB+5jC9k36M+w1kmEPvd386+PU5LEsxJzCRZMw==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@types/hast": "^2.0.0", + "css-selector-parser": "^1.0.0", + "hastscript": "^7.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/metro/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/hast-util-parse-selector": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", + "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@types/hast": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/metro/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/metro/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/hastscript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", + "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", "dependencies": { - "color-name": "~1.1.4" + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/metro/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } }, - "node_modules/metro/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/hermes-estree": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz", + "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==" + }, + "node_modules/hermes-parser": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz", + "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==", "dependencies": { - "ms": "2.0.0" + "hermes-estree": "0.19.1" } }, - "node_modules/metro/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "dependencies": { + "source-map": "^0.7.3" + }, "engines": { "node": ">=8" } }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", - "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" - }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", - "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", - "dependencies": { - "hermes-estree": "0.20.1" + "node_modules/hermes-profile-transformer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" } }, - "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/metro/node_modules/serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/metro/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" } }, - "node_modules/metro/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/mhchemparser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.2.1.tgz", - "integrity": "sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==" + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "whatwg-encoding": "^2.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=12" } }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=4.0.0" + "node": ">= 0.8" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dependencies": { - "mime-db": "1.52.0" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">= 0.6" + "node": ">= 6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, "engines": { - "node": ">=6" + "node": ">= 6.0.0" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, + "node_modules/https-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dependencies": { - "brace-expansion": "^2.0.1" + "debug": "4" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 6.0.0" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" } }, - "node_modules/mj-context-menu": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz", - "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, + "node_modules/husky": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", + "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", + "dev": true, + "license": "MIT", "bin": { - "mkdirp": "bin/cmd.js" + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/mmjstool": { - "version": "1.0.0", - "resolved": "git+ssh://git@github.com/mattermost/mattermost-utilities.git#83b1b311972b8f5e750aae4019457a40abb5aa44", - "integrity": "sha512-SFAbT+eN1mvgSfRTe8k6IMKVWbhGItTJtxZ+Pt0mX+fe8pakB3MkIkWzHBHVnEDI9Ek9kmQFGF1aZwzKFHXyYQ==", + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { - "estree-walk": "^2.2.0", - "filehound": "^1.17.5", - "sort-json": "^2.0.0", - "webpack-cli": "^4.9.1", - "yargs": "^17.3.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, - "bin": { - "mmjstool": "bin/mmjstool" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "engines": { - "node": "*" + "node": ">= 4" } }, - "node_modules/moment-timezone": { - "version": "0.5.45", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", - "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "node_modules/image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", "dependencies": { - "moment": "^2.29.4" + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" }, "engines": { - "node": "*" + "node": ">=16.x" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multi-sort-stream": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multi-sort-stream/-/multi-sort-stream-1.0.4.tgz", - "integrity": "sha512-hAZ8JOEQFbgdLe8HWZbb7gdZg0/yAIHF00Qfo3kd0rXFv96nXe+/bPTrKHZ2QMHugGX4FiAyET1Lt+jiB+7Qlg==", - "dev": true - }, - "node_modules/multipipe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-4.0.0.tgz", - "integrity": "sha512-jzcEAzFXoWwWwUbvHCNPwBlTz3WCWe/jPcXSmTfbo/VjRwRTfvLZ/bdvtiTdqCe8d4otCSsPCbhGYcX+eggpKQ==", - "dev": true, - "dependencies": { - "duplexer2": "^0.1.2", - "object-assign": "^4.1.0" - } + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "optional": true, "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mv/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/mv/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "optional": true, + "node_modules/import-in-the-middle": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz", + "integrity": "sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==", + "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "acorn": "^8.8.2", + "acorn-import-assertions": "^1.9.0", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" } }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, - "optional": true, "dependencies": { - "glob": "^6.0.1" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, "bin": { - "rimraf": "bin.js" + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nan": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", - "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" + "dependencies": { + "find-up": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=8" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "dev": true, - "optional": true, - "bin": { - "ncp": "bin/ncp" + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" } }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/nocache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", - "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", - "engines": { - "node": ">=12.0.0" - } + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/nock": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.4.tgz", - "integrity": "sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==", - "dev": true, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "license": "MIT", "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "propagate": "^2.0.0" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" }, "engines": { - "node": ">= 10.13" + "node": ">=6" } }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dependencies": { - "minimatch": "^3.0.2" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-dir/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node": ">= 0.4" } }, - "node_modules/node-dir/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, "engines": { - "node": "*" + "node": ">= 0.10" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/intl-messageformat": { + "version": "10.5.14", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.14.tgz", + "integrity": "sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==", "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "tslib": "^2.4.0" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-ipc": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz", - "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", - "dev": true, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dependencies": { - "event-pubsub": "4.3.0", - "js-message": "1.0.7", - "js-queue": "2.0.2" - }, - "engines": { - "node": ">=8.0.0" + "loose-envify": "^1.0.0" } }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "node_modules/node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "node_modules/invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "peer": true, "engines": { - "node": ">=0.12.0" + "node": ">=8" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" + "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" } }, - "node_modules/node-version": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.2.0.tgz", - "integrity": "sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==", - "dev": true, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=4" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dependencies": { - "boolbase": "^1.0.0" + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/nullthrows": { + "node_modules/is-arguments": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" - }, - "node_modules/ob1": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.8.tgz", - "integrity": "sha512-QHJQk/lXMmAW8I7AIM3in1MSlwe1umR72Chhi8B7Xnq6mzjhBKkA6Fy/zAhQnGkA4S912EPCEvTij5yh+EQTAA==", - "engines": { - "node": ">=18" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -15751,23 +16264,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15776,30 +16284,37 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "optional": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15808,46 +16323,40 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -15856,54 +16365,43 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dependencies": { - "ee-first": "1.1.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" }, "engines": { "node": ">=8" @@ -15912,971 +16410,7460 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" + "call-bind": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "color-name": "~1.1.4" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "engines": { "node": ">=8" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "is-glob": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, + "node_modules/is-invalid-path/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/is-invalid-path/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "is-extglob": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=8" + "node": ">=0.12.0" } }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { - "p-try": "^2.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-try": { + "node_modules/is-path-cwd": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dependencies": { - "callsites": "^3.0.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pascalcase": { + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-valid-path": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "license": "MIT", + "dependencies": { + "is-invalid-path": "^0.1.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/patch-package": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", - "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", "dev": true, "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "ci-info": "^3.7.0", - "cross-spawn": "^7.0.3", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", - "json-stable-stringify": "^1.0.2", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^7.5.3", - "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^2.2.2" + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { - "patch-package": "index.js" + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=14", - "npm": ">5" + "node": ">=10" } }, - "node_modules/patch-package/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-expo": { + "version": "51.0.3", + "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-51.0.3.tgz", + "integrity": "sha512-r49OuS9X2S/dH+lSfNmarBS2L/tgvBhzOgKHYFyDJWo+Bb5uVs7Rg/GZal/RD/NDkKFJuByGAaW1F6zHYnjZnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@expo/config": "~9.0.0-beta.0", + "@expo/json-file": "^8.3.0", + "@jest/create-cache-key-function": "^29.2.1", + "babel-jest": "^29.2.1", + "find-up": "^5.0.0", + "jest-environment-jsdom": "^29.2.1", + "jest-watch-select-projects": "^2.0.0", + "jest-watch-typeahead": "2.2.1", + "json5": "^2.2.3", + "lodash": "^4.17.19", + "react-test-renderer": "18.2.0", + "stacktrace-js": "^2.0.2" + }, + "bin": { + "jest": "bin/jest.js" + } + }, + "node_modules/jest-expo/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-expo/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-expo/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-select-projects": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-watch-select-projects/-/jest-watch-select-projects-2.0.0.tgz", + "integrity": "sha512-j00nW4dXc2NiCW6znXgFLF9g8PJ0zP25cpQ1xRro/HU2GBfZQFZD0SoXnAlaoKkIY4MlfTMkKGbNXFpvCdjl1w==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "chalk": "^3.0.0", + "prompts": "^2.2.1" + } + }, + "node_modules/jest-watch-select-projects/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-select-projects/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-select-projects/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watch-select-projects/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watch-select-projects/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-select-projects/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-2.2.1.tgz", + "integrity": "sha512-jYpYmUnTzysmVnwq49TAxlmtOAwp8QIqvZyoofQFn8fiWhEDZj33ZXzg3JA4nGnzWFm1hbWf3ADpteUokvXgFA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^6.0.0", + "chalk": "^4.0.0", + "jest-regex-util": "^29.0.0", + "jest-watcher": "^29.0.0", + "slash": "^5.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0 || ^29.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-escapes": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watch-typeahead/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jetifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-2.0.0.tgz", + "integrity": "sha512-J4Au9KuT74te+PCCCHKgAjyLlEa+2VyIAEPNCdE5aNkAJ6FAJcAqcdzEkSnzNksIa9NkGmC4tPiClk2e7tCJuQ==", + "dev": true, + "bin": { + "jetifier": "bin/jetify", + "jetifier-standalone": "bin/jetifier-standalone", + "jetify": "bin/jetify" + } + }, + "node_modules/jimp-compact": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", + "license": "MIT" + }, + "node_modules/joi": { + "version": "17.13.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz", + "integrity": "sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/join-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsc-android": { + "version": "250231.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", + "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==" + }, + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==" + }, + "node_modules/jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/jscodeshift/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jscodeshift/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jscodeshift/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jscodeshift/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jscodeshift/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-deref-sync": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", + "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", + "license": "MIT", + "dependencies": { + "clone": "^2.1.2", + "dag-map": "~1.0.0", + "is-valid-path": "^0.1.1", + "lodash": "^4.17.13", + "md5": "~2.2.0", + "memory-cache": "~0.2.0", + "traverse": "~0.6.6", + "valid-url": "~1.0.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/json-schema-deref-sync/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/json-schema-deref-sync/node_modules/md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json-stable-stringify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", + "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "peer": true, + "dependencies": { + "invert-kv": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/lightningcss": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", + "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.19.0", + "lightningcss-darwin-x64": "1.19.0", + "lightningcss-linux-arm-gnueabihf": "1.19.0", + "lightningcss-linux-arm64-gnu": "1.19.0", + "lightningcss-linux-arm64-musl": "1.19.0", + "lightningcss-linux-x64-gnu": "1.19.0", + "lightningcss-linux-x64-musl": "1.19.0", + "lightningcss-win32-x64-msvc": "1.19.0" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", + "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", + "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", + "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", + "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", + "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", + "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", + "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", + "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "peer": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "dependencies": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" + }, + "bin": { + "logkitty": "bin/logkitty.js" + } + }, + "node_modules/logkitty/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/logkitty/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/logkitty/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/logkitty/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/logkitty/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/logkitty/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/logkitty/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lokijs": { + "name": "@nozbe/lokijs", + "version": "1.5.12-wmelon6", + "resolved": "https://registry.npmjs.org/@nozbe/lokijs/-/lokijs-1.5.12-wmelon6.tgz", + "integrity": "sha512-GXsaqY8qTJ6xdCrGyno2t+ON2aj6PrUDdvhbrkxK/0Fp12C4FGvDg1wS+voLU9BANYHEnr7KRWfItDZnQkjoAg==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowlight": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", + "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "dependencies": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "peer": true, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" + }, + "node_modules/mathjax-full": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz", + "integrity": "sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==", + "dependencies": { + "esm": "^3.2.25", + "mhchemparser": "^4.1.0", + "mj-context-menu": "^0.6.1", + "speech-rule-engine": "^4.0.6" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", + "license": "MIT", + "dependencies": { + "buffer-alloc": "^1.1.0" + }, + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/md5hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", + "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==", + "license": "MIT" + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "node_modules/mem": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", + "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "peer": true, + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^2.1.0", + "p-is-promise": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, + "node_modules/memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", + "license": "BSD-2-Clause" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/metro": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.8.tgz", + "integrity": "sha512-in7S0W11mg+RNmcXw+2d9S3zBGmCARDxIwoXJAmLUQOQoYsRP3cpGzyJtc7WOw8+FXfpgXvceD0u+PZIHXEL7g==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/parser": "^7.20.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.20.1", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.80.8", + "metro-cache": "0.80.8", + "metro-cache-key": "0.80.8", + "metro-config": "0.80.8", + "metro-core": "0.80.8", + "metro-file-map": "0.80.8", + "metro-resolver": "0.80.8", + "metro-runtime": "0.80.8", + "metro-source-map": "0.80.8", + "metro-symbolicate": "0.80.8", + "metro-transform-plugins": "0.80.8", + "metro-transform-worker": "0.80.8", + "mime-types": "^2.1.27", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "rimraf": "^3.0.2", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "throat": "^5.0.0", + "ws": "^7.5.1", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.8.tgz", + "integrity": "sha512-TTzNwRZb2xxyv4J/+yqgtDAP2qVqH3sahsnFu6Xv4SkLqzrivtlnyUbaeTdJ9JjtADJUEjCbgbFgUVafrXdR9Q==", + "dependencies": { + "@babel/core": "^7.20.0", + "hermes-parser": "0.20.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "dependencies": { + "hermes-estree": "0.20.1" + } + }, + "node_modules/metro-cache": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.8.tgz", + "integrity": "sha512-5svz+89wSyLo7BxdiPDlwDTgcB9kwhNMfNhiBZPNQQs1vLFXxOkILwQiV5F2EwYT9DEr6OPZ0hnJkZfRQ8lDYQ==", + "dependencies": { + "metro-core": "0.80.8", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-cache-key": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.8.tgz", + "integrity": "sha512-qWKzxrLsRQK5m3oH8ePecqCc+7PEhR03cJE6Z6AxAj0idi99dHOSitTmY0dclXVB9vP2tQIAE8uTd8xkYGk8fA==", + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-config": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.8.tgz", + "integrity": "sha512-VGQJpfJawtwRzGzGXVUoohpIkB0iPom4DmSbAppKfumdhtLA8uVeEPp2GM61kL9hRvdbMhdWA7T+hZFDlo4mJA==", + "dependencies": { + "connect": "^3.6.5", + "cosmiconfig": "^5.0.5", + "jest-validate": "^29.6.3", + "metro": "0.80.8", + "metro-cache": "0.80.8", + "metro-core": "0.80.8", + "metro-runtime": "0.80.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-core": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.8.tgz", + "integrity": "sha512-g6lud55TXeISRTleW6SHuPFZHtYrpwNqbyFIVd9j9Ofrb5IReiHp9Zl8xkAfZQp8v6ZVgyXD7c130QTsCz+vBw==", + "dependencies": { + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.80.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-file-map": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.8.tgz", + "integrity": "sha512-eQXMFM9ogTfDs2POq7DT2dnG7rayZcoEgRbHPXvhUWkVwiKkro2ngcBE++ck/7A36Cj5Ljo79SOkYwHaWUDYDw==", + "dependencies": { + "anymatch": "^3.0.3", + "debug": "^2.2.0", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "micromatch": "^4.0.4", + "node-abort-controller": "^3.1.1", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/metro-file-map/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro-file-map/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/metro-minify-terser": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.8.tgz", + "integrity": "sha512-y8sUFjVvdeUIINDuW1sejnIjkZfEF+7SmQo0EIpYbWmwh+kq/WMj74yVaBWuqNjirmUp1YNfi3alT67wlbBWBQ==", + "dependencies": { + "terser": "^5.15.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-resolver": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.8.tgz", + "integrity": "sha512-JdtoJkP27GGoZ2HJlEsxs+zO7jnDUCRrmwXJozTlIuzLHMRrxgIRRby9fTCbMhaxq+iA9c+wzm3iFb4NhPmLbQ==", + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-runtime": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.8.tgz", + "integrity": "sha512-2oScjfv6Yb79PelU1+p8SVrCMW9ZjgEiipxq7jMRn8mbbtWzyv3g8Mkwr+KwOoDFI/61hYPUbY8cUnu278+x1g==", + "dependencies": { + "@babel/runtime": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-source-map": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.8.tgz", + "integrity": "sha512-+OVISBkPNxjD4eEKhblRpBf463nTMk3KMEeYS8Z4xM/z3qujGJGSsWUGRtH27+c6zElaSGtZFiDMshEb8mMKQg==", + "dependencies": { + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.80.8", + "nullthrows": "^1.1.1", + "ob1": "0.80.8", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-symbolicate": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.8.tgz", + "integrity": "sha512-nwhYySk79jQhwjL9QmOUo4wS+/0Au9joEryDWw7uj4kz2yvw1uBjwmlql3BprQCBzRdB3fcqOP8kO8Es+vE31g==", + "dependencies": { + "invariant": "^2.2.4", + "metro-source-map": "0.80.8", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-symbolicate/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-transform-plugins": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.8.tgz", + "integrity": "sha512-sSu8VPL9Od7w98MftCOkQ1UDeySWbsIAS5I54rW22BVpPnI3fQ42srvqMLaJUQPjLehUanq8St6OMBCBgH/UWw==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.20.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-transform-worker": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.8.tgz", + "integrity": "sha512-+4FG3TQk3BTbNqGkFb2uCaxYTfsbuFOCKMMURbwu0ehCP8ZJuTUramkaNZoATS49NSAkRgUltgmBa4YaKZ5mqw==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "metro": "0.80.8", + "metro-babel-transformer": "0.80.8", + "metro-cache": "0.80.8", + "metro-cache-key": "0.80.8", + "metro-minify-terser": "0.80.8", + "metro-source-map": "0.80.8", + "metro-transform-plugins": "0.80.8", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/metro/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/metro/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/metro/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/metro/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "dependencies": { + "hermes-estree": "0.20.1" + } + }, + "node_modules/metro/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/metro/node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mhchemparser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.2.1.tgz", + "integrity": "sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/mj-context-menu": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz", + "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mmjstool": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/mattermost/mattermost-utilities.git#83b1b311972b8f5e750aae4019457a40abb5aa44", + "integrity": "sha512-SFAbT+eN1mvgSfRTe8k6IMKVWbhGItTJtxZ+Pt0mX+fe8pakB3MkIkWzHBHVnEDI9Ek9kmQFGF1aZwzKFHXyYQ==", + "dev": true, + "dependencies": { + "estree-walk": "^2.2.0", + "filehound": "^1.17.5", + "sort-json": "^2.0.0", + "webpack-cli": "^4.9.1", + "yargs": "^17.3.1" + }, + "bin": { + "mmjstool": "bin/mmjstool" + } + }, + "node_modules/module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==", + "peer": true + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "peer": true, + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/nocache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", + "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/nock": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.4.tgz", + "integrity": "sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-dir/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-dir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "license": "MIT" + }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "engines": { + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, + "node_modules/nwsapi": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", + "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", + "dev": true + }, + "node_modules/ob1": { + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.8.tgz", + "integrity": "sha512-QHJQk/lXMmAW8I7AIM3in1MSlwe1umR72Chhi8B7Xnq6mzjhBKkA6Fy/zAhQnGkA4S912EPCEvTij5yh+EQTAA==", + "engines": { + "node": ">=18" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", + "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "peer": true, + "dependencies": { + "execa": "^4.0.0", + "lcid": "^3.0.0", + "mem": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-locale/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/os-locale/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/os-locale/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-locale/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "peer": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "license": "MIT", + "dependencies": { + "pngjs": "^3.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/password-prompt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", + "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", + "license": "0BSD", + "dependencies": { + "ansi-escapes": "^4.3.2", + "cross-spawn": "^7.0.3" + } + }, + "node_modules/password-prompt/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/patch-package": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", + "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", + "dev": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/patch-package/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/patch-package/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/patch-package/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/patch-package/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/patch-package/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/patch-package/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-to-regexp": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.1.0.tgz", + "integrity": "sha512-Bqn3vc8CMHty6zuD+tG23s6v2kwxslHEhTj4eYaVKGIEB+YX/2wd0/rgXLFD9G9id9KCtbVy/3ZgmvZjpa0UdQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/plist/node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/plist/node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/prismjs": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qrcode-terminal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "license": "MIT", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.1.tgz", + "integrity": "sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw==", + "license": "MIT", + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-error-boundary": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", + "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "react": ">=16.13.1" + } + }, + "node_modules/react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, + "node_modules/react-freeze": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz", + "integrity": "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=17.0.0" + } + }, + "node_modules/react-intl": { + "version": "6.6.8", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.8.tgz", + "integrity": "sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "@formatjs/intl": "2.10.4", + "@formatjs/intl-displaynames": "6.6.8", + "@formatjs/intl-listformat": "7.5.7", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/react": "16 || 17 || 18", + "hoist-non-react-statics": "^3.3.2", + "intl-messageformat": "10.5.14", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "react": "^16.6.0 || 17 || 18", + "typescript": "^4.7 || 5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-lifecycles-compat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-2.0.0.tgz", + "integrity": "sha512-txfpPCQYiazVdcbMRhatqWKcAxJweUu2wDXvts5/7Wyp6+Y9cHojqXHsLPEckzutfHlxZhG8Oiundbmp8Fd6eQ==" + }, + "node_modules/react-native": { + "version": "0.74.5", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.5.tgz", + "integrity": "sha512-Bgg2WvxaGODukJMTZFTZBNMKVaROHLwSb8VAGEdrlvKwfb1hHg/3aXTUICYk7dwgAnb+INbGMwnF8yeAgIUmqw==", + "license": "MIT", + "dependencies": { + "@jest/create-cache-key-function": "^29.6.3", + "@react-native-community/cli": "13.6.9", + "@react-native-community/cli-platform-android": "13.6.9", + "@react-native-community/cli-platform-ios": "13.6.9", + "@react-native/assets-registry": "0.74.87", + "@react-native/codegen": "0.74.87", + "@react-native/community-cli-plugin": "0.74.87", + "@react-native/gradle-plugin": "0.74.87", + "@react-native/js-polyfills": "0.74.87", + "@react-native/normalize-colors": "0.74.87", + "@react-native/virtualized-lists": "0.74.87", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "jest-environment-node": "^29.6.3", + "jsc-android": "^250231.0.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.80.3", + "metro-source-map": "^0.80.3", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.3.0", + "react-devtools-core": "^5.0.0", + "react-refresh": "^0.14.0", + "react-shallow-renderer": "^16.15.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.24.0-canary-efb381bbf-20230505", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.2", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "18.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-native-background-timer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/react-native-background-timer/-/react-native-background-timer-2.4.1.tgz", + "integrity": "sha512-TE4Kiy7jUyv+hugxDxitzu38sW1NqjCk4uE5IgU2WevLv7sZacaBc6PZKOShNRPGirLl1NWkaG3LDEkdb9Um5g==", + "peerDependencies": { + "react-native": ">=0.47.0" + } + }, + "node_modules/react-native-document-picker": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/react-native-document-picker/-/react-native-document-picker-9.3.0.tgz", + "integrity": "sha512-X/j0xKn8cObckpHTNwE/hW9WzBiP6oKx820FYu1Nat43QnnHmmT6uozFgAUDcJfxmZGcEdLlbv0lNhnyRXJyyA==", + "dependencies": { + "invariant": "^2.2.4" + }, + "peerDependencies": { + "react": "*", + "react-native": "*", + "react-native-windows": "*" + }, + "peerDependenciesMeta": { + "react-native-windows": { + "optional": true + } + } + }, + "node_modules/react-native-dotenv": { + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/react-native-dotenv/-/react-native-dotenv-3.4.11.tgz", + "integrity": "sha512-6vnIE+WHABSeHCaYP6l3O1BOEhWxKH6nHAdV7n/wKn/sciZ64zPPp2NUdEUf1m7g4uuzlLbjgr+6uDt89q2DOg==", + "dependencies": { + "dotenv": "^16.4.5" + }, + "peerDependencies": { + "@babel/runtime": "^7.20.6" + } + }, + "node_modules/react-native-exception-handler": { + "version": "2.10.10", + "resolved": "https://registry.npmjs.org/react-native-exception-handler/-/react-native-exception-handler-2.10.10.tgz", + "integrity": "sha512-otAXGoZDl1689OoUJWN/rXxVbdoZ3xcmyF1uq/CsizdLwwyZqVGd6d+p/vbYvnF996FfEyAEBnHrdFxulTn51w==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-file-viewer": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/react-native-file-viewer/-/react-native-file-viewer-2.1.5.tgz", + "integrity": "sha512-MGC6sx9jsqHdefhVQ6o0akdsPGpkXgiIbpygb2Sg4g4bh7v6K1cardLV1NwGB9A6u1yICOSDT/MOC//9Ez6EUg==", + "peerDependencies": { + "react-native": ">=0.47" + } + }, + "node_modules/react-native-gesture-handler": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.18.1.tgz", + "integrity": "sha512-WF2fxQ5kTaxHghlkBM4YxO86SyGWVwrSNgJ1E8z/ZtL2xD5B3bg5agvuVFfOzvceC114yq71s6E9vKPz94ZxRw==", + "license": "MIT", + "dependencies": { + "@egjs/hammerjs": "^2.0.17", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-haptic-feedback": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-native-haptic-feedback/-/react-native-haptic-feedback-2.2.0.tgz", + "integrity": "sha512-3tqJOjCguWhIrX0nkURn4yw6kXdsSDjjrvZCRjKXYGlL28hdQmoW2okAHduDTD9FWj9lA+lHgwFWgGs4aFNN7A==", + "license": "MIT", + "peerDependencies": { + "react-native": ">=0.60.0" + } + }, + "node_modules/react-native-image-picker": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-7.1.2.tgz", + "integrity": "sha512-b5y5nP60RIPxlAXlptn2QwlIuZWCUDWa/YPUVjgHc0Ih60mRiOg1PSzf0IjHSLeOZShCpirpvSPGnDExIpTRUg==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-incall-manager": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/react-native-incall-manager/-/react-native-incall-manager-4.2.0.tgz", + "integrity": "sha512-DC5XRQVAwNgNA6YZ3ILF6ttWXv/MUQ4omzmVDh/uHc0TW0v4f8QIdt6D9GHZhGKb3+qB7XKUxpXVBrLH+9zqfQ==", + "peerDependencies": { + "react-native": ">=0.40.0" + } + }, + "node_modules/react-native-iphone-x-helper": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", + "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==", + "peerDependencies": { + "react-native": ">=0.42.0" + } + }, + "node_modules/react-native-keyboard-aware-scroll-view": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.5.tgz", + "integrity": "sha512-XwfRn+T/qBH9WjTWIBiJD2hPWg0yJvtaEw6RtPCa5/PYHabzBaWxYBOl0usXN/368BL1XktnZPh8C2lmTpOREA==", + "dependencies": { + "prop-types": "^15.6.2", + "react-native-iphone-x-helper": "^1.0.3" + }, + "peerDependencies": { + "react-native": ">=0.48.4" + } + }, + "node_modules/react-native-keychain": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-8.2.0.tgz", + "integrity": "sha512-SkRtd9McIl1Ss2XSWNLorG+KMEbgeVqX+gV+t3u1EAAqT8q2/OpRmRbxpneT2vnb/dMhiU7g6K/pf3nxLUXRvA==" + }, + "node_modules/react-native-localize": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-3.2.1.tgz", + "integrity": "sha512-XZsK9+V98XygBkutaPVxTIrwV48wXKk4AQfbjUOmrrsGCqa8WzWsBuEafwWVCMOEQ5coQt0SfM3XKT0Qg7DFXw==", + "license": "MIT", + "peerDependencies": { + "react": ">=18.1.0", + "react-native": ">=0.70.0", + "react-native-macos": ">=0.70.0" + }, + "peerDependenciesMeta": { + "react-native-macos": { + "optional": true + } + } + }, + "node_modules/react-native-macos": { + "version": "0.73.29", + "resolved": "https://registry.npmjs.org/react-native-macos/-/react-native-macos-0.73.29.tgz", + "integrity": "sha512-srB9XlCpvJ+HDNB/y43G9YNzsVAJHeXO4/f4/2djeKxodKhkxvzIxNie8WX7HQviR341d/KZmCMt72aNeuam/A==", + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.6.3", + "@react-native-community/cli": "12.3.6", + "@react-native-community/cli-platform-android": "12.3.6", + "@react-native-community/cli-platform-ios": "12.3.6", + "@react-native-mac/virtualized-lists": "^0.73.3", + "@react-native/assets-registry": "0.73.1", + "@react-native/codegen": "0.73.3", + "@react-native/community-cli-plugin": "0.73.17", + "@react-native/gradle-plugin": "0.73.4", + "@react-native/js-polyfills": "0.73.1", + "@react-native/normalize-colors": "0.73.2", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "deprecated-react-native-prop-types": "^5.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "jest-environment-node": "^29.6.3", + "jsc-android": "^250231.0.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.80.3", + "metro-source-map": "^0.80.3", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.3.0", + "react-devtools-core": "^4.27.7", + "react-refresh": "^0.14.0", + "react-shallow-renderer": "^16.15.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.24.0-canary-efb381bbf-20230505", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.3", + "yargs": "^17.6.2" + }, + "bin": { + "react-native-macos": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "18.2.0" + } + }, + "node_modules/react-native-macos/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.6.tgz", + "integrity": "sha512-647OSi6xBb8FbwFqX9zsJxOzu685AWtrOUWHfOkbKD+5LOpGORw+GQo0F9rWZnB68rLQyfKUZWJeaD00pGv5fw==", + "peer": true, + "dependencies": { + "@react-native-community/cli-clean": "12.3.6", + "@react-native-community/cli-config": "12.3.6", + "@react-native-community/cli-debugger-ui": "12.3.6", + "@react-native-community/cli-doctor": "12.3.6", + "@react-native-community/cli-hermes": "12.3.6", + "@react-native-community/cli-plugin-metro": "12.3.6", + "@react-native-community/cli-server-api": "12.3.6", + "@react-native-community/cli-tools": "12.3.6", + "@react-native-community/cli-types": "12.3.6", + "chalk": "^4.1.2", + "commander": "^9.4.1", + "deepmerge": "^4.3.0", + "execa": "^5.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.2", + "semver": "^7.5.2" + }, + "bin": { + "react-native": "build/bin.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-clean": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.6.tgz", + "integrity": "sha512-gUU29ep8xM0BbnZjwz9MyID74KKwutq9x5iv4BCr2im6nly4UMf1B1D+V225wR7VcDGzbgWjaezsJShLLhC5ig==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "execa": "^5.0.0" + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-config": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.6.tgz", + "integrity": "sha512-JGWSYQ9EAK6m2v0abXwFLEfsqJ1zkhzZ4CV261QZF9MoUNB6h57a274h1MLQR9mG6Tsh38wBUuNfEPUvS1vYew==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "cosmiconfig": "^5.1.0", + "deepmerge": "^4.3.0", + "glob": "^7.1.3", + "joi": "^17.2.1" + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-debugger-ui": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.6.tgz", + "integrity": "sha512-SjUKKsx5FmcK9G6Pb6UBFT0s9JexVStK5WInmANw75Hm7YokVvHEgtprQDz2Uvy5znX5g2ujzrkIU//T15KQzA==", + "peer": true, + "dependencies": { + "serve-static": "^1.13.1" + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-doctor": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.6.tgz", + "integrity": "sha512-fvBDv2lTthfw4WOQKkdTop2PlE9GtfrlNnpjB818MhcdEnPjfQw5YaTUcnNEGsvGomdCs1MVRMgYXXwPSN6OvQ==", + "peer": true, + "dependencies": { + "@react-native-community/cli-config": "12.3.6", + "@react-native-community/cli-platform-android": "12.3.6", + "@react-native-community/cli-platform-ios": "12.3.6", + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "deepmerge": "^4.3.0", + "envinfo": "^7.10.0", + "execa": "^5.0.0", + "hermes-profile-transformer": "^0.0.6", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "semver": "^7.5.2", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1", + "yaml": "^2.2.1" + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-hermes": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.6.tgz", + "integrity": "sha512-sNGwfOCl8OAIjWCkwuLpP8NZbuO0dhDI/2W7NeOGDzIBsf4/c4MptTrULWtGIH9okVPLSPX0NnRyGQ+mSwWyuQ==", + "peer": true, + "dependencies": { + "@react-native-community/cli-platform-android": "12.3.6", + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6" + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-platform-android": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.6.tgz", + "integrity": "sha512-DeDDAB8lHpuGIAPXeeD9Qu2+/wDTFPo99c8uSW49L0hkmZJixzvvvffbGQAYk32H0TmaI7rzvzH+qzu7z3891g==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-xml-parser": "^4.2.4", + "glob": "^7.1.3", + "logkitty": "^0.7.1" + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-platform-ios": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.6.tgz", + "integrity": "sha512-3eZ0jMCkKUO58wzPWlvAPRqezVKm9EPZyaPyHbRPWU8qw7JqkvnRlWIaYDGpjCJgVW4k2hKsEursLtYKb188tg==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-xml-parser": "^4.0.12", + "glob": "^7.1.3", + "ora": "^5.4.1" + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-server-api": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.6.tgz", + "integrity": "sha512-80NIMzo8b2W+PL0Jd7NjiJW9mgaT8Y8wsIT/lh6mAvYH7mK0ecDJUYUTAAv79Tbo1iCGPAr3T295DlVtS8s4yQ==", + "peer": true, + "dependencies": { + "@react-native-community/cli-debugger-ui": "12.3.6", + "@react-native-community/cli-tools": "12.3.6", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.1", + "nocache": "^3.0.1", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^7.5.1" + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-tools": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.6.tgz", + "integrity": "sha512-FPEvZn19UTMMXUp/piwKZSh8cMEfO8G3KDtOwo53O347GTcwNrKjgZGtLSPELBX2gr+YlzEft3CoRv2Qmo83fQ==", + "peer": true, + "dependencies": { + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "find-up": "^5.0.0", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^7.5.2", + "shell-quote": "^1.7.3", + "sudo-prompt": "^9.0.0" } }, - "node_modules/patch-package/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-tools/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/patch-package/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/react-native-macos/node_modules/@react-native-community/cli-types": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.6.tgz", + "integrity": "sha512-xPqTgcUtZowQ8WKOkI9TLGBwH2bGggOC4d2FFaIRST3gTcjrEeGRNeR5aXCzJFIgItIft8sd7p2oKEdy90+01Q==", + "peer": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "joi": "^17.2.1" } }, - "node_modules/patch-package/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/patch-package/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, + "node_modules/react-native-macos/node_modules/@react-native/assets-registry": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.73.1.tgz", + "integrity": "sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==", + "peer": true, "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "node_modules/react-native-macos/node_modules/@react-native/babel-plugin-codegen": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz", + "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==", + "peer": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@react-native/codegen": "0.73.3" }, "engines": { - "node": ">=10" - } - }, - "node_modules/patch-package/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, + "node_modules/react-native-macos/node_modules/@react-native/babel-preset": { + "version": "0.73.21", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz", + "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==", + "peer": true, "dependencies": { - "glob": "^7.1.3" + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.4", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" } }, - "node_modules/patch-package/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/react-native-macos/node_modules/@react-native/codegen": { + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz", + "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" } }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/react-native-macos/node_modules/@react-native/community-cli-plugin": { + "version": "0.73.17", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.17.tgz", + "integrity": "sha512-F3PXZkcHg+1ARIr6FRQCQiB7ZAA+MQXGmq051metRscoLvgYJwj7dgC8pvgy0kexzUkHu5BNKrZeySzUft3xuQ==", + "peer": true, + "dependencies": { + "@react-native-community/cli-server-api": "12.3.6", + "@react-native-community/cli-tools": "12.3.6", + "@react-native/dev-middleware": "0.73.8", + "@react-native/metro-babel-transformer": "0.73.15", + "chalk": "^4.0.0", + "execa": "^5.1.1", + "metro": "^0.80.3", + "metro-config": "^0.80.3", + "metro-core": "^0.80.3", + "node-fetch": "^2.2.0", + "readline": "^1.3.0" + }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/react-native-macos/node_modules/@react-native/debugger-frontend": { + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz", + "integrity": "sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw==", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/react-native-macos/node_modules/@react-native/dev-middleware": { + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.8.tgz", + "integrity": "sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg==", + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.73.3", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^1.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "open": "^7.0.3", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0", + "ws": "^6.2.3" + }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, + "node_modules/react-native-macos/node_modules/@react-native/dev-middleware/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, "engines": { "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/react-native-macos/node_modules/@react-native/gradle-plugin": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz", + "integrity": "sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg==", + "peer": true, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "node_modules/react-native-macos/node_modules/@react-native/js-polyfills": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz", + "integrity": "sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==", + "peer": true, "engines": { - "node": ">= 6" + "node": ">=18" } }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "node_modules/react-native-macos/node_modules/@react-native/metro-babel-transformer": { + "version": "0.73.15", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz", + "integrity": "sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==", + "peer": true, "dependencies": { - "find-up": "^3.0.0" + "@babel/core": "^7.20.0", + "@react-native/babel-preset": "0.73.21", + "hermes-parser": "0.15.0", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/react-native-macos/node_modules/@react-native/normalize-colors": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz", + "integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==", + "peer": true + }, + "node_modules/react-native-macos/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "peer": true, "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" + "@types/yargs-parser": "*" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/react-native-macos/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/react-native-macos/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, "dependencies": { - "p-try": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/react-native-macos/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, "dependencies": { - "p-limit": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6" + "node": ">=7.0.0" } }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/react-native-macos/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/react-native-macos/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "peer": true, "engines": { - "node": ">=4" + "node": "^12.20.0 || >=14" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, + "node_modules/react-native-macos/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" + "ms": "2.0.0" } }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, + "node_modules/react-native-macos/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "peer": true, "dependencies": { - "locate-path": "^3.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=6 <7 || >=8" } }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, + "node_modules/react-native-macos/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, + "node_modules/react-native-macos/node_modules/hermes-estree": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", + "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==", + "peer": true + }, + "node_modules/react-native-macos/node_modules/hermes-parser": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", + "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", + "peer": true, "dependencies": { - "p-try": "^2.0.0" + "hermes-estree": "0.15.0" + } + }, + "node_modules/react-native-macos/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/react-native-macos/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, + "node_modules/react-native-macos/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/react-native-macos/node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "peer": true, "dependencies": { - "p-limit": "^2.0.0" + "is-wsl": "^1.1.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, + "node_modules/react-native-macos/node_modules/open/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "peer": true, "engines": { "node": ">=4" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", - "dev": true, + "node_modules/react-native-macos/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "peer": true, - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "p-limit": "^3.0.2" }, "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, + "node_modules/react-native-macos/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "peer": true, "dependencies": { - "fast-diff": "^1.1.2" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">= 10" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/react-native-macos/node_modules/react-devtools-core": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", + "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", + "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "shell-quote": "^1.6.1", + "ws": "^7" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/react-native-macos/node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "peer": true, "engines": { - "node": ">=10" + "node": ">=8.3.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "node_modules/react-native-macos/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "peer": true }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "node_modules/react-native-macos/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "peer": true + }, + "node_modules/react-native-macos/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "peer": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, "engines": { "node": ">=6" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/react-native-macos/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true, "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" + "node": ">=6" } }, - "node_modules/promise-polyfill": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", - "integrity": "sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ==", - "dev": true - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/react-native-macos/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "node": ">=8" } }, - "node_modules/propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "dev": true, + "node_modules/react-native-macos/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "peer": true, "engines": { - "node": ">= 8" + "node": ">= 4.0.0" } }, - "node_modules/proper-lockfile": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-3.2.0.tgz", - "integrity": "sha512-iMghHHXv2bsxl6NchhEaFck8tvX3F9cknEEh1SUpguUOBjN7PAAW9BLzmbc1g/mCD1gY3EE2EABBHPJfFdHFmA==", - "dev": true, + "node_modules/react-native-macos/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "peer": true, "dependencies": { - "graceful-fs": "^4.1.11", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" + "async-limiter": "~1.0.0" } }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/react-native-math-view": { + "version": "3.9.5", + "resolved": "https://registry.npmjs.org/react-native-math-view/-/react-native-math-view-3.9.5.tgz", + "integrity": "sha512-UJxrisNafszfqIW+utoSDylb72SkZ92cKz1IfE5Dm0s+uIaHxOxepF2DdRbktAV8c0FEFllnXfErcGdh8sfIBw==", + "dependencies": { + "hast-util-from-selector": "^2.0.0", + "lodash": "^4.17.21", + "mathjax-full": "^3.1.4", + "transformation-matrix": "^2.8.0" + }, + "peerDependencies": { + "react-native": "*", + "react-native-svg": "*" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "node_modules/react-native-navigation": { + "version": "7.40.1", + "resolved": "https://registry.npmjs.org/react-native-navigation/-/react-native-navigation-7.40.1.tgz", + "integrity": "sha512-GQ6Azdhf6EtkUVdYv/3hbid3tDiEQnJf47TL6Joc0R92DUEA3c1tpXG0z9Y/D7lzYFOaIBPg3efnMHrpk74GeA==", + "license": "MIT", + "dependencies": { + "hoist-non-react-statics": "3.x.x", + "lodash": "4.17.x", + "prop-types": "15.x.x", + "react-lifecycles-compat": "2.0.0", + "tslib": "1.9.3" + }, + "bin": { + "rnn-link": "autolink/postlink/run.js" + }, + "peerDependencies": { + "react": "*", + "react-native": "*", + "remx": "*" + }, + "peerDependenciesMeta": { + "remx": { + "optional": true + } + } }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true + "node_modules/react-native-navigation/node_modules/tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "node_modules/react-native-notifications": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/react-native-notifications/-/react-native-notifications-5.1.0.tgz", + "integrity": "sha512-laqDSDlCvEASmJR6cXpqaryK855ejQd07vrfYERzhv68YDOoSkKy/URExRP4vAfAOVqHhix80tLbNUcfvZk2VQ==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/react-native-performance": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-native-performance/-/react-native-performance-5.1.2.tgz", + "integrity": "sha512-l5JOJphNzox9a9icL3T6O/gEqZuqWqcbejW04WPa10m0UanBdIYrNkPFl48B3ivWw3MabpjB6GiDYv7old9/fw==", + "peerDependencies": { + "react-native": "*" } }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" + "node_modules/react-native-permissions": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-4.1.5.tgz", + "integrity": "sha512-r6VMRacASmtRHS+GZ+5HQCp9p9kiE+UU9magHOZCXZLTJitdTuVHWZRrb4v4oqZGU+zAp3mZhTQftuMMv+WLUg==", + "peerDependencies": { + "react": ">=18.1.0", + "react-native": ">=0.70.0", + "react-native-windows": ">=0.70.0" + }, + "peerDependenciesMeta": { + "react-native-windows": { + "optional": true } - ] + } }, - "node_modules/query-string": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "node_modules/react-native-reanimated": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.14.0.tgz", + "integrity": "sha512-TAxLtCfRyC/nOLeWoX/8MhdIF+Fi1e1NbLhIgEm5Kv9/gioAwSNaqLUYxjIClU1RaLwSTE8iaiHNVhTU4TS9DA==", + "license": "MIT", "dependencies": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" + "@babel/plugin-transform-arrow-functions": "^7.0.0-0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", + "@babel/plugin-transform-optional-chaining": "^7.0.0-0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", + "@babel/plugin-transform-template-literals": "^7.0.0-0", + "@babel/preset-typescript": "^7.16.7", + "convert-source-map": "^2.0.0", + "invariant": "^2.2.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-safe-area-context": { + "version": "4.10.8", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.10.8.tgz", + "integrity": "sha512-Jx1lovhvIdYygg0UsMCBUJN0Wvj9GlA5bbcBLzjZf93uJpNHzaiHC4hR280+sNVK1+/pMHEyEkXVHDZE5JWn0w==", + "license": "MIT", + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "node_modules/react-native-screens": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.34.0.tgz", + "integrity": "sha512-8ri3Pd9QcpfXnVckOe/Lnto+BXmSPHV/Q0RB0XW0gDKsCv5wi5k7ez7g1SzgiYHl29MSdiqgjH30zUyOOowOaw==", + "license": "MIT", "dependencies": { - "inherits": "~2.0.3" + "react-freeze": "^1.0.0", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/react-native-section-list-get-item-layout": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-native-section-list-get-item-layout/-/react-native-section-list-get-item-layout-2.2.3.tgz", + "integrity": "sha512-fzCW5SiYP6qCZyDHebaElHonIFr8NFrZK9JDkxFLnpxMJih4d+HQ4rHyOs0Z4Gb/FjyCVbRH7RtEnjeQ0XffMg==" }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "peer": true, + "node_modules/react-native-shadow-2": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-native-shadow-2/-/react-native-shadow-2-7.1.0.tgz", + "integrity": "sha512-Ph7/E8XuM7QQJ0fNTPC0Xp+8ezntVnCF0XnOQBvmQIDTrYLq/fzQSOdqTC4dzs+pXtZ7Yis2ewjVaDc5URUCAg==", "dependencies": { - "safe-buffer": "^5.1.0" + "colord": "2.9.2" + }, + "peerDependencies": { + "react-native": "*", + "react-native-svg": ">=12.1.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/react-native-share": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/react-native-share/-/react-native-share-10.2.1.tgz", + "integrity": "sha512-Z2LWGYWH7raM4H6Oauttv1tEhaB43XSWJAN8iS6oaSG9CnyrUBeYFF4QpU1AH5RgNeylXQdN8CtbizCHHt6coQ==", "engines": { - "node": ">= 0.6" + "node": ">=16" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "node_modules/react-native-svg": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.4.0.tgz", + "integrity": "sha512-zkBEbme/Dba4yqreg/oI2P6/6LrLywWY7HhaSwpU7Pb5COpTd2fV6/ShsgZz8GRFFdidUPwWmx01FITUsjhkmw==", + "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "css-select": "^5.1.0", + "css-tree": "^1.1.3", + "warn-once": "0.1.1" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/react-devtools-core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.0.2.tgz", - "integrity": "sha512-+fDp3kDfPpF5xbAACJmihPHL0iDKpnKr7MyRvW0nZq71xwHWDW3zRCNpiiAJWd85vAGT+GbV9O87zAIDgvV1gw==", - "dev": true, + "node_modules/react-native-vector-icons": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.1.0.tgz", + "integrity": "sha512-fdQjCHIdoXmRoTZ5gvN1FmT4sGLQ2wmQiNZHKJQUYnE2tkIwjGnxNch+6Nd4lHAACvMWO7LOzBNot2u/zlOmkw==", "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" + "prop-types": "^15.7.2", + "yargs": "^16.1.1" + }, + "bin": { + "fa-upgrade.sh": "bin/fa-upgrade.sh", + "fa5-upgrade": "bin/fa5-upgrade.sh", + "fa6-upgrade": "bin/fa6-upgrade.sh", + "generate-icon": "bin/generate-icon.js" } }, - "node_modules/react-error-boundary": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", - "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", - "dev": true, + "node_modules/react-native-vector-icons/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { - "@babel/runtime": "^7.12.5" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/react-native-vector-icons/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=10", - "npm": ">=6" - }, - "peerDependencies": { - "react": ">=16.13.1" + "node": ">=10" } }, - "node_modules/react-fast-compare": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", - "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" - }, - "node_modules/react-freeze": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz", - "integrity": "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==", + "node_modules/react-native-vector-icons/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "engines": { "node": ">=10" - }, + } + }, + "node_modules/react-native-video": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/react-native-video/-/react-native-video-6.4.3.tgz", + "integrity": "sha512-KDuIz/JsD3mYT1Ma2oDBE3GIEHRO3a9GzMAEV8pKMtIh29j7X2DLr2L9oD4Kv94ggYag/+RuZpOtftxnDHDoXA==", + "license": "MIT", "peerDependencies": { - "react": ">=17.0.0" + "react": "*", + "react-native": "*" } }, - "node_modules/react-intl": { - "version": "6.6.5", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.5.tgz", - "integrity": "sha512-OErDPbGqus0QKVj77MGCC9Plbnys3CDQrq6Lw41c60pmeTdn41AhoS1SIzXG6SUlyF7qNN2AVqfrrIvHUgSyLQ==", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/icu-messageformat-parser": "2.7.6", - "@formatjs/intl": "2.10.1", - "@formatjs/intl-displaynames": "6.6.6", - "@formatjs/intl-listformat": "7.5.5", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/react": "16 || 17 || 18", - "hoist-non-react-statics": "^3.3.2", - "intl-messageformat": "10.5.11", - "tslib": "^2.4.0" + "node_modules/react-native-walkthrough-tooltip": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/react-native-walkthrough-tooltip/-/react-native-walkthrough-tooltip-1.6.0.tgz", + "integrity": "sha512-8DHpcqsF+2VULYnKJCSZtllhlFUFiZcWCwOlw5RLkS451ElxPWJn9ShOFVZtkPMcwQAirq3SovumVM7Y/li0Fw==", + "dependencies": { + "prop-types": "^15.6.1", + "react-fast-compare": "^2.0.4" }, "peerDependencies": { - "react": "^16.6.0 || 17 || 18", - "typescript": "^4.7 || 5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@types/react": ">=16.8.24" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "node_modules/react-native-webrtc": { + "version": "124.0.3", + "resolved": "https://registry.npmjs.org/react-native-webrtc/-/react-native-webrtc-124.0.3.tgz", + "integrity": "sha512-uU+FxcAlBjLQ1EZnw3q+nje8xw+7hwZ7yDpSK4f1OJ25LrLA6fAjgxHCtMn9D20D9tR4+pRkBugBzkfqmboIFg==", + "license": "MIT", + "dependencies": { + "base64-js": "1.5.1", + "debug": "4.3.4", + "event-target-shim": "6.0.2" + }, + "peerDependencies": { + "react-native": ">=0.60.0" + } }, - "node_modules/react-lifecycles-compat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-2.0.0.tgz", - "integrity": "sha512-txfpPCQYiazVdcbMRhatqWKcAxJweUu2wDXvts5/7Wyp6+Y9cHojqXHsLPEckzutfHlxZhG8Oiundbmp8Fd6eQ==" + "node_modules/react-native-webrtc/node_modules/event-target-shim": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", + "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } }, - "node_modules/react-native": { - "version": "0.73.6", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.6.tgz", - "integrity": "sha512-oqmZe8D2/VolIzSPZw+oUd6j/bEmeRHwsLn1xLA5wllEYsZ5zNuMsDus235ONOnCRwexqof/J3aztyQswSmiaA==", + "node_modules/react-native-windows": { + "version": "0.73.14", + "resolved": "https://registry.npmjs.org/react-native-windows/-/react-native-windows-0.73.14.tgz", + "integrity": "sha512-QzRlqdxCS+gUnLLc8fvr+EPuVGZh7Qfgbfyawcc6zsJLsKh4r2FXbDKsl14Iu+aU5p1rIB0x8pefoOoknWBDeA==", + "peer": true, "dependencies": { + "@babel/runtime": "^7.0.0", "@jest/create-cache-key-function": "^29.6.3", "@react-native-community/cli": "12.3.6", "@react-native-community/cli-platform-android": "12.3.6", "@react-native-community/cli-platform-ios": "12.3.6", + "@react-native-windows/cli": "0.73.4", "@react-native/assets-registry": "0.73.1", "@react-native/codegen": "0.73.3", "@react-native/community-cli-plugin": "0.73.17", @@ -16907,619 +23894,759 @@ "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", "scheduler": "0.24.0-canary-efb381bbf-20230505", + "source-map-support": "^0.5.19", "stacktrace-parser": "^0.1.10", "whatwg-fetch": "^3.0.0", - "ws": "^6.2.2", + "ws": "^6.2.3", "yargs": "^17.6.2" }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "react": "18.2.0", + "react-native": "^0.73.0" + } + }, + "node_modules/react-native-windows/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/react-native-windows/node_modules/@react-native-community/cli": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.6.tgz", + "integrity": "sha512-647OSi6xBb8FbwFqX9zsJxOzu685AWtrOUWHfOkbKD+5LOpGORw+GQo0F9rWZnB68rLQyfKUZWJeaD00pGv5fw==", + "peer": true, + "dependencies": { + "@react-native-community/cli-clean": "12.3.6", + "@react-native-community/cli-config": "12.3.6", + "@react-native-community/cli-debugger-ui": "12.3.6", + "@react-native-community/cli-doctor": "12.3.6", + "@react-native-community/cli-hermes": "12.3.6", + "@react-native-community/cli-plugin-metro": "12.3.6", + "@react-native-community/cli-server-api": "12.3.6", + "@react-native-community/cli-tools": "12.3.6", + "@react-native-community/cli-types": "12.3.6", + "chalk": "^4.1.2", + "commander": "^9.4.1", + "deepmerge": "^4.3.0", + "execa": "^5.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.2", + "semver": "^7.5.2" + }, "bin": { - "react-native": "cli.js" + "react-native": "build/bin.js" }, "engines": { "node": ">=18" - }, - "peerDependencies": { - "react": "18.2.0" } }, - "node_modules/react-native-background-timer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/react-native-background-timer/-/react-native-background-timer-2.4.1.tgz", - "integrity": "sha512-TE4Kiy7jUyv+hugxDxitzu38sW1NqjCk4uE5IgU2WevLv7sZacaBc6PZKOShNRPGirLl1NWkaG3LDEkdb9Um5g==", - "peerDependencies": { - "react-native": ">=0.47.0" + "node_modules/react-native-windows/node_modules/@react-native-community/cli-clean": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.6.tgz", + "integrity": "sha512-gUU29ep8xM0BbnZjwz9MyID74KKwutq9x5iv4BCr2im6nly4UMf1B1D+V225wR7VcDGzbgWjaezsJShLLhC5ig==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "execa": "^5.0.0" + } + }, + "node_modules/react-native-windows/node_modules/@react-native-community/cli-config": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.6.tgz", + "integrity": "sha512-JGWSYQ9EAK6m2v0abXwFLEfsqJ1zkhzZ4CV261QZF9MoUNB6h57a274h1MLQR9mG6Tsh38wBUuNfEPUvS1vYew==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "cosmiconfig": "^5.1.0", + "deepmerge": "^4.3.0", + "glob": "^7.1.3", + "joi": "^17.2.1" } }, - "node_modules/react-native-button": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/react-native-button/-/react-native-button-3.1.0.tgz", - "integrity": "sha512-z/KUH1zXHTYoGfldGRm8DKTdYO/5DgNYJDdi/kRdDesb7rx9PiM1ZMq1PUjT+/B0uy/BltJnSLhLCvs4pTL7uQ==", + "node_modules/react-native-windows/node_modules/@react-native-community/cli-debugger-ui": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.6.tgz", + "integrity": "sha512-SjUKKsx5FmcK9G6Pb6UBFT0s9JexVStK5WInmANw75Hm7YokVvHEgtprQDz2Uvy5znX5g2ujzrkIU//T15KQzA==", + "peer": true, "dependencies": { - "deprecated-react-native-prop-types": "^3.0.1", - "prop-types": "^15.5.10" - }, - "peerDependencies": { - "react-native": "*" + "serve-static": "^1.13.1" } }, - "node_modules/react-native-button/node_modules/deprecated-react-native-prop-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-3.0.2.tgz", - "integrity": "sha512-JoZY5iNM+oJlN2Ldpq0KSi0h3Nig4hlNJj5nWzWp8eL3uikMCvHwjSGPitwkEw0arL5JFra5nuGJQpXRbEjApg==", + "node_modules/react-native-windows/node_modules/@react-native-community/cli-doctor": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.6.tgz", + "integrity": "sha512-fvBDv2lTthfw4WOQKkdTop2PlE9GtfrlNnpjB818MhcdEnPjfQw5YaTUcnNEGsvGomdCs1MVRMgYXXwPSN6OvQ==", + "peer": true, "dependencies": { - "@react-native/normalize-color": "^2.1.0", - "invariant": "^2.2.4", - "prop-types": "^15.8.1" + "@react-native-community/cli-config": "12.3.6", + "@react-native-community/cli-platform-android": "12.3.6", + "@react-native-community/cli-platform-ios": "12.3.6", + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "deepmerge": "^4.3.0", + "envinfo": "^7.10.0", + "execa": "^5.0.0", + "hermes-profile-transformer": "^0.0.6", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "semver": "^7.5.2", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1", + "yaml": "^2.2.1" } }, - "node_modules/react-native-calendars": { - "version": "1.1304.1", - "resolved": "https://registry.npmjs.org/react-native-calendars/-/react-native-calendars-1.1304.1.tgz", - "integrity": "sha512-D1aU5lLhi7KCCCeHhKOkcC41K8s3paiiIfMaOQx6NezCbgKHelqT01WPpAZLh3Cm0QTC5EZo0oDPD0mCdKrDgQ==", + "node_modules/react-native-windows/node_modules/@react-native-community/cli-hermes": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.6.tgz", + "integrity": "sha512-sNGwfOCl8OAIjWCkwuLpP8NZbuO0dhDI/2W7NeOGDzIBsf4/c4MptTrULWtGIH9okVPLSPX0NnRyGQ+mSwWyuQ==", + "peer": true, "dependencies": { - "hoist-non-react-statics": "^3.3.1", - "lodash": "^4.17.15", - "memoize-one": "^5.2.1", - "prop-types": "^15.5.10", - "react-native-swipe-gestures": "^1.0.5", - "recyclerlistview": "^4.0.0", - "xdate": "^0.8.0" - }, - "optionalDependencies": { - "moment": "^2.29.4" + "@react-native-community/cli-platform-android": "12.3.6", + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6" } }, - "node_modules/react-native-create-thumbnail": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/react-native-create-thumbnail/-/react-native-create-thumbnail-1.6.4.tgz", - "integrity": "sha512-JWuKXswDXtqUPfuqh6rjCVMvTSSG3kUtwvSK/YdaNU0i+nZKxeqHmt/CO2+TyI/WSUFynGVmWT1xOHhCZAFsRQ==", - "peerDependencies": { - "react-native": ">=0.59.0" + "node_modules/react-native-windows/node_modules/@react-native-community/cli-platform-android": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.6.tgz", + "integrity": "sha512-DeDDAB8lHpuGIAPXeeD9Qu2+/wDTFPo99c8uSW49L0hkmZJixzvvvffbGQAYk32H0TmaI7rzvzH+qzu7z3891g==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-xml-parser": "^4.2.4", + "glob": "^7.1.3", + "logkitty": "^0.7.1" } }, - "node_modules/react-native-device-info": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-10.13.1.tgz", - "integrity": "sha512-j/7Z+Yl9Cesjp8vKaVzbuJQKJSVs4ojXATt5WjwipZ0Ss0mBJjqtbc4x5dfZLmQ4y55VVa7c0v8KHca1iqY/TQ==", - "peerDependencies": { - "react-native": "*" + "node_modules/react-native-windows/node_modules/@react-native-community/cli-platform-ios": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.6.tgz", + "integrity": "sha512-3eZ0jMCkKUO58wzPWlvAPRqezVKm9EPZyaPyHbRPWU8qw7JqkvnRlWIaYDGpjCJgVW4k2hKsEursLtYKb188tg==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.6", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-xml-parser": "^4.0.12", + "glob": "^7.1.3", + "ora": "^5.4.1" } }, - "node_modules/react-native-document-picker": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/react-native-document-picker/-/react-native-document-picker-9.1.1.tgz", - "integrity": "sha512-BW+7DbsILuFThlBm7NUFVUmKKf6Awkcf9R0q8wiCU2DlGGtAKQTt2iHpO5+Dn/7WMPB+rqNv3X1HsmJQ0t5R3g==", + "node_modules/react-native-windows/node_modules/@react-native-community/cli-server-api": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.6.tgz", + "integrity": "sha512-80NIMzo8b2W+PL0Jd7NjiJW9mgaT8Y8wsIT/lh6mAvYH7mK0ecDJUYUTAAv79Tbo1iCGPAr3T295DlVtS8s4yQ==", + "peer": true, "dependencies": { - "invariant": "^2.2.4" + "@react-native-community/cli-debugger-ui": "12.3.6", + "@react-native-community/cli-tools": "12.3.6", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.1", + "nocache": "^3.0.1", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^7.5.1" + } + }, + "node_modules/react-native-windows/node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "peer": true, + "engines": { + "node": ">=8.3.0" }, "peerDependencies": { - "react": "*", - "react-native": "*", - "react-native-windows": "*" + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { - "react-native-windows": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { "optional": true } } }, - "node_modules/react-native-dotenv": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/react-native-dotenv/-/react-native-dotenv-3.4.11.tgz", - "integrity": "sha512-6vnIE+WHABSeHCaYP6l3O1BOEhWxKH6nHAdV7n/wKn/sciZ64zPPp2NUdEUf1m7g4uuzlLbjgr+6uDt89q2DOg==", + "node_modules/react-native-windows/node_modules/@react-native-community/cli-tools": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.6.tgz", + "integrity": "sha512-FPEvZn19UTMMXUp/piwKZSh8cMEfO8G3KDtOwo53O347GTcwNrKjgZGtLSPELBX2gr+YlzEft3CoRv2Qmo83fQ==", + "peer": true, "dependencies": { - "dotenv": "^16.4.5" - }, - "peerDependencies": { - "@babel/runtime": "^7.20.6" + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "find-up": "^5.0.0", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^7.5.2", + "shell-quote": "^1.7.3", + "sudo-prompt": "^9.0.0" } }, - "node_modules/react-native-elements": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-3.4.3.tgz", - "integrity": "sha512-VtZc25EecPZyUBER85zFK9ZbY6kkUdcm1ZwJ9hdoGSCr1R/GFgxor4jngOcSYeMvQ+qimd5No44OVJW3rSJECA==", - "hasInstallScript": true, + "node_modules/react-native-windows/node_modules/@react-native-community/cli-tools/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "peer": true, "dependencies": { - "@types/react-native-vector-icons": "^6.4.6", - "color": "^3.1.2", - "deepmerge": "^4.2.2", - "hoist-non-react-statics": "^3.3.2", - "lodash.isequal": "^4.5.0", - "opencollective-postinstall": "^2.0.3", - "react-native-ratings": "8.0.4", - "react-native-size-matters": "^0.3.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "react-native-safe-area-context": ">= 3.0.0", - "react-native-vector-icons": ">7.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-native-elements/node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "node_modules/react-native-windows/node_modules/@react-native-community/cli-types": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.6.tgz", + "integrity": "sha512-xPqTgcUtZowQ8WKOkI9TLGBwH2bGggOC4d2FFaIRST3gTcjrEeGRNeR5aXCzJFIgItIft8sd7p2oKEdy90+01Q==", + "peer": true, "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/react-native-exception-handler": { - "version": "2.10.10", - "resolved": "https://registry.npmjs.org/react-native-exception-handler/-/react-native-exception-handler-2.10.10.tgz", - "integrity": "sha512-otAXGoZDl1689OoUJWN/rXxVbdoZ3xcmyF1uq/CsizdLwwyZqVGd6d+p/vbYvnF996FfEyAEBnHrdFxulTn51w==", - "peerDependencies": { - "react": "*", - "react-native": "*" + "joi": "^17.2.1" } }, - "node_modules/react-native-fast-image": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.6.3.tgz", - "integrity": "sha512-Sdw4ESidXCXOmQ9EcYguNY2swyoWmx53kym2zRsvi+VeFCHEdkO+WG1DK+6W81juot40bbfLNhkc63QnWtesNg==", - "peerDependencies": { - "react": "^17 || ^18", - "react-native": ">=0.60.0" + "node_modules/react-native-windows/node_modules/@react-native/assets-registry": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.73.1.tgz", + "integrity": "sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==", + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/react-native-file-viewer": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/react-native-file-viewer/-/react-native-file-viewer-2.1.5.tgz", - "integrity": "sha512-MGC6sx9jsqHdefhVQ6o0akdsPGpkXgiIbpygb2Sg4g4bh7v6K1cardLV1NwGB9A6u1yICOSDT/MOC//9Ez6EUg==", - "peerDependencies": { - "react-native": ">=0.47" + "node_modules/react-native-windows/node_modules/@react-native/babel-plugin-codegen": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz", + "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==", + "peer": true, + "dependencies": { + "@react-native/codegen": "0.73.3" + }, + "engines": { + "node": ">=18" } }, - "node_modules/react-native-fs": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/react-native-fs/-/react-native-fs-2.20.0.tgz", - "integrity": "sha512-VkTBzs7fIDUiy/XajOSNk0XazFE9l+QlMAce7lGuebZcag5CnjszB+u4BdqzwaQOdcYb5wsJIsqq4kxInIRpJQ==", + "node_modules/react-native-windows/node_modules/@react-native/babel-preset": { + "version": "0.73.21", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz", + "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==", + "peer": true, "dependencies": { - "base-64": "^0.1.0", - "utf8": "^3.0.0" - }, - "peerDependencies": { - "react-native": "*", - "react-native-windows": "*" + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.4", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" }, - "peerDependenciesMeta": { - "react-native-windows": { - "optional": true - } + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" } }, - "node_modules/react-native-fs/node_modules/base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" - }, - "node_modules/react-native-gesture-handler": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.16.0.tgz", - "integrity": "sha512-1hFkx7RIfeJSyTQQ0Nkv4icFVZ5+XjQkd47OgZMBFzoB7ecL+nFSz8KLi3OCWOhq+nbHpSPlSG5VF3CQNCJpWA==", + "node_modules/react-native-windows/node_modules/@react-native/codegen": { + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz", + "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==", + "peer": true, "dependencies": { - "@egjs/hammerjs": "^2.0.17", - "hoist-non-react-statics": "^3.3.0", + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", "invariant": "^2.2.4", - "lodash": "^4.17.21", - "prop-types": "^15.7.2" + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" }, "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-haptic-feedback": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/react-native-haptic-feedback/-/react-native-haptic-feedback-2.2.0.tgz", - "integrity": "sha512-3tqJOjCguWhIrX0nkURn4yw6kXdsSDjjrvZCRjKXYGlL28hdQmoW2okAHduDTD9FWj9lA+lHgwFWgGs4aFNN7A==", - "peerDependencies": { - "react-native": ">=0.60.0" - } - }, - "node_modules/react-native-hw-keyboard-event": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/react-native-hw-keyboard-event/-/react-native-hw-keyboard-event-0.0.4.tgz", - "integrity": "sha512-G8qp0nm17PHigLb/axgdF9xg51BKCG2p1AGeq//J/luLp5zNczIcQJh+nm02R1MeEUE3e53wqO4LMe0MV3raZg==", - "peerDependencies": { - "react-native": ">=0.50" - } - }, - "node_modules/react-native-image-picker": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-7.1.2.tgz", - "integrity": "sha512-b5y5nP60RIPxlAXlptn2QwlIuZWCUDWa/YPUVjgHc0Ih60mRiOg1PSzf0IjHSLeOZShCpirpvSPGnDExIpTRUg==", - "peerDependencies": { - "react": "*", - "react-native": "*" + "@babel/preset-env": "^7.1.6" } }, - "node_modules/react-native-in-app-review": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/react-native-in-app-review/-/react-native-in-app-review-4.3.3.tgz", - "integrity": "sha512-Q9sXBtK8tCBYFPCGmMgeMlkxXC5e6vAyPZK26OC1oOKUuKUd0QORnryk/qbwnuN4fLshHQN8UKlLgyHLGRuK3A==" - }, - "node_modules/react-native-incall-manager": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/react-native-incall-manager/-/react-native-incall-manager-4.2.0.tgz", - "integrity": "sha512-DC5XRQVAwNgNA6YZ3ILF6ttWXv/MUQ4omzmVDh/uHc0TW0v4f8QIdt6D9GHZhGKb3+qB7XKUxpXVBrLH+9zqfQ==", - "peerDependencies": { - "react-native": ">=0.40.0" + "node_modules/react-native-windows/node_modules/@react-native/community-cli-plugin": { + "version": "0.73.17", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.17.tgz", + "integrity": "sha512-F3PXZkcHg+1ARIr6FRQCQiB7ZAA+MQXGmq051metRscoLvgYJwj7dgC8pvgy0kexzUkHu5BNKrZeySzUft3xuQ==", + "peer": true, + "dependencies": { + "@react-native-community/cli-server-api": "12.3.6", + "@react-native-community/cli-tools": "12.3.6", + "@react-native/dev-middleware": "0.73.8", + "@react-native/metro-babel-transformer": "0.73.15", + "chalk": "^4.0.0", + "execa": "^5.1.1", + "metro": "^0.80.3", + "metro-config": "^0.80.3", + "metro-core": "^0.80.3", + "node-fetch": "^2.2.0", + "readline": "^1.3.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/react-native-iphone-x-helper": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", - "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==", - "peerDependencies": { - "react-native": ">=0.42.0" + "node_modules/react-native-windows/node_modules/@react-native/debugger-frontend": { + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz", + "integrity": "sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw==", + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/react-native-keyboard-aware-scroll-view": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.5.tgz", - "integrity": "sha512-XwfRn+T/qBH9WjTWIBiJD2hPWg0yJvtaEw6RtPCa5/PYHabzBaWxYBOl0usXN/368BL1XktnZPh8C2lmTpOREA==", + "node_modules/react-native-windows/node_modules/@react-native/dev-middleware": { + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.8.tgz", + "integrity": "sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg==", + "peer": true, "dependencies": { - "prop-types": "^15.6.2", - "react-native-iphone-x-helper": "^1.0.3" + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.73.3", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^1.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "open": "^7.0.3", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0", + "ws": "^6.2.3" }, - "peerDependencies": { - "react-native": ">=0.48.4" + "engines": { + "node": ">=18" } }, - "node_modules/react-native-keyboard-tracking-view": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/react-native-keyboard-tracking-view/-/react-native-keyboard-tracking-view-5.7.0.tgz", - "integrity": "sha512-MDeEwAbn9LJDOfHq0QLCGaZirVLk2X/tHqkAqz3y6uxryTRdSl9PwleOVar5Jx2oAPEg4J9BXbUD1wwOOi+5Kg==", - "peerDependencies": { - "react": ">=16.0.0", - "react-native": ">=0.51.0" + "node_modules/react-native-windows/node_modules/@react-native/dev-middleware/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-native-keychain": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-8.2.0.tgz", - "integrity": "sha512-SkRtd9McIl1Ss2XSWNLorG+KMEbgeVqX+gV+t3u1EAAqT8q2/OpRmRbxpneT2vnb/dMhiU7g6K/pf3nxLUXRvA==" - }, - "node_modules/react-native-linear-gradient": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.8.3.tgz", - "integrity": "sha512-KflAXZcEg54PXkLyflaSZQ3PJp4uC4whM7nT/Uot9m0e/qxFV3p6uor1983D1YOBJbJN7rrWdqIjq0T42jOJyA==", - "peerDependencies": { - "react": "*", - "react-native": "*" + "node_modules/react-native-windows/node_modules/@react-native/gradle-plugin": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz", + "integrity": "sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg==", + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/react-native-localize": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-3.1.0.tgz", - "integrity": "sha512-A7Rrxl8vuAr5FAqtMFrM5ELLdmszohK6FoHL6qlgxx4HScyOnadoZksbvKHbn+zV5nE8kud2Z4kJM10cN120Zg==", - "peerDependencies": { - "react": ">=18.1.0", - "react-native": ">=0.70.0", - "react-native-macos": ">=0.70.0" - }, - "peerDependenciesMeta": { - "react-native-macos": { - "optional": true - } + "node_modules/react-native-windows/node_modules/@react-native/js-polyfills": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz", + "integrity": "sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==", + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/react-native-math-view": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/react-native-math-view/-/react-native-math-view-3.9.5.tgz", - "integrity": "sha512-UJxrisNafszfqIW+utoSDylb72SkZ92cKz1IfE5Dm0s+uIaHxOxepF2DdRbktAV8c0FEFllnXfErcGdh8sfIBw==", + "node_modules/react-native-windows/node_modules/@react-native/metro-babel-transformer": { + "version": "0.73.15", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz", + "integrity": "sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==", + "peer": true, "dependencies": { - "hast-util-from-selector": "^2.0.0", - "lodash": "^4.17.21", - "mathjax-full": "^3.1.4", - "transformation-matrix": "^2.8.0" + "@babel/core": "^7.20.0", + "@react-native/babel-preset": "0.73.21", + "hermes-parser": "0.15.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" }, "peerDependencies": { - "react-native": "*", - "react-native-svg": "*" + "@babel/core": "*" } }, - "node_modules/react-native-navigation": { - "version": "7.39.1", - "resolved": "https://registry.npmjs.org/react-native-navigation/-/react-native-navigation-7.39.1.tgz", - "integrity": "sha512-VpJjrgoyolldUiUnR5zUzWamiSBlX0mv23kJAiSrwErfuVAXer7xxrF6B3o8eutx5B/DJ8SWOENGJfgmZ4rAbw==", + "node_modules/react-native-windows/node_modules/@react-native/normalize-colors": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz", + "integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==", + "peer": true + }, + "node_modules/react-native-windows/node_modules/@react-native/virtualized-lists": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.73.4.tgz", + "integrity": "sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog==", + "peer": true, "dependencies": { - "hoist-non-react-statics": "3.x.x", - "lodash": "4.17.x", - "prop-types": "15.x.x", - "react-lifecycles-compat": "2.0.0", - "tslib": "1.9.3" + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" }, - "bin": { - "rnn-link": "autolink/postlink/run.js" + "engines": { + "node": ">=18" }, "peerDependencies": { - "react": "*", - "react-native": "*", - "remx": "*" - }, - "peerDependenciesMeta": { - "remx": { - "optional": true - } + "react-native": "*" } }, - "node_modules/react-native-navigation/node_modules/tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - }, - "node_modules/react-native-notifications": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-native-notifications/-/react-native-notifications-5.1.0.tgz", - "integrity": "sha512-laqDSDlCvEASmJR6cXpqaryK855ejQd07vrfYERzhv68YDOoSkKy/URExRP4vAfAOVqHhix80tLbNUcfvZk2VQ==", - "peerDependencies": { - "react": "*", - "react-native": "*" + "node_modules/react-native-windows/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" } }, - "node_modules/react-native-permissions": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-4.1.5.tgz", - "integrity": "sha512-r6VMRacASmtRHS+GZ+5HQCp9p9kiE+UU9magHOZCXZLTJitdTuVHWZRrb4v4oqZGU+zAp3mZhTQftuMMv+WLUg==", - "peerDependencies": { - "react": ">=18.1.0", - "react-native": ">=0.70.0", - "react-native-windows": ">=0.70.0" + "node_modules/react-native-windows/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" }, - "peerDependenciesMeta": { - "react-native-windows": { - "optional": true - } + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/react-native-ratings": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/react-native-ratings/-/react-native-ratings-8.0.4.tgz", - "integrity": "sha512-Xczu5lskIIRD6BEdz9A0jDRpEck/SFxRqiglkXi0u67yAtI1/pcJC76P4MukCbT8K4BPVl+42w83YqXBoBRl7A==", + "node_modules/react-native-windows/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, "dependencies": { - "lodash": "^4.17.15" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, - "peerDependencies": { - "react": "*", - "react-native": "*" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/react-native-reanimated": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.8.1.tgz", - "integrity": "sha512-EdM0vr3JEaNtqvstqESaPfOBy0gjYBkr1iEolWJ82Ax7io8y9OVUIphgsLKTB36CtR1XtmBw0RZVj7KArc7ZVA==", + "node_modules/react-native-windows/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, "dependencies": { - "@babel/plugin-transform-arrow-functions": "^7.0.0-0", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", - "@babel/plugin-transform-optional-chaining": "^7.0.0-0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", - "@babel/plugin-transform-template-literals": "^7.0.0-0", - "@babel/preset-typescript": "^7.16.7", - "convert-source-map": "^2.0.0", - "invariant": "^2.2.4" + "color-name": "~1.1.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0", - "react": "*", - "react-native": "*" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/react-native-safe-area-context": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.9.0.tgz", - "integrity": "sha512-/OJD9Pb8IURyvn+1tWTszWPJqsbZ4hyHBU9P0xhOmk7h5owSuqL0zkfagU0pg7Vh0G2NKQkaPpUKUMMCUMDh/w==", - "peerDependencies": { - "react": "*", - "react-native": "*" + "node_modules/react-native-windows/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/react-native-windows/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "peer": true, + "engines": { + "node": "^12.20.0 || >=14" } }, - "node_modules/react-native-screens": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.30.1.tgz", - "integrity": "sha512-/muEvjocCtFb+j5J3YmLvB25+f4rIU8hnnxgGTkXcAf2omPBY8uhPjJaaFUlvj64VEoEzJcRpugbXWsjfPPIFg==", + "node_modules/react-native-windows/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, "dependencies": { - "react-freeze": "^1.0.0", - "warn-once": "^0.1.0" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" + "ms": "2.0.0" } }, - "node_modules/react-native-section-list-get-item-layout": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-native-section-list-get-item-layout/-/react-native-section-list-get-item-layout-2.2.3.tgz", - "integrity": "sha512-fzCW5SiYP6qCZyDHebaElHonIFr8NFrZK9JDkxFLnpxMJih4d+HQ4rHyOs0Z4Gb/FjyCVbRH7RtEnjeQ0XffMg==" - }, - "node_modules/react-native-shadow-2": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/react-native-shadow-2/-/react-native-shadow-2-7.0.8.tgz", - "integrity": "sha512-6QlmbJvHCmDGa85jwtfrVxhro1oGm/ezTlciom0A+i0UFAzxlvmRiMHyKXg1hEB2PQkKPoG6ZpANju4mpqPqGA==", + "node_modules/react-native-windows/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "peer": true, "dependencies": { - "colord": "2.9.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "peerDependencies": { - "react-native": "*", - "react-native-svg": ">=12.1.0" + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/react-native-share": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/react-native-share/-/react-native-share-10.1.0.tgz", - "integrity": "sha512-fKKvwaZe5s3HW0tcRKyR5AWvAfXvkk0FgTw1nYWYjI4gNqntXbMjRqWZed8Hmd1MvIJS17K/ELPges0tsxbp3g==", + "node_modules/react-native-windows/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, "engines": { - "node": ">=16" + "node": ">=8" } }, - "node_modules/react-native-size-matters": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/react-native-size-matters/-/react-native-size-matters-0.3.1.tgz", - "integrity": "sha512-mKOfBLIBFBcs9br1rlZDvxD5+mAl8Gfr5CounwJtxI6Z82rGrMO+Kgl9EIg3RMVf3G855a85YVqHJL2f5EDRlw==", - "peerDependencies": { - "react-native": "*" - } + "node_modules/react-native-windows/node_modules/hermes-estree": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", + "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==", + "peer": true }, - "node_modules/react-native-svg": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.1.0.tgz", - "integrity": "sha512-p0Sx0EpQNk1nu6UcMEiB8K9P04n3J7s+pNYUwf1d/Yz+v4hk961VjuVqjyndgiEbHZyWiKWLZRVNuvLpwjPY2A==", + "node_modules/react-native-windows/node_modules/hermes-parser": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", + "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", + "peer": true, "dependencies": { - "css-select": "^5.1.0", - "css-tree": "^1.1.3" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" + "hermes-estree": "0.15.0" } }, - "node_modules/react-native-svg-transformer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-native-svg-transformer/-/react-native-svg-transformer-1.3.0.tgz", - "integrity": "sha512-SV92uRjENDuanHLVuLy2Sdvt6f8vu7qnG8vC9CwBiAXV0BpWN4/wPvfc+r2WPAkcctRZLLOvrGnGA2o8nZd0cg==", - "dev": true, + "node_modules/react-native-windows/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/react-native-windows/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "peer": true, "dependencies": { - "@svgr/core": "^8.1.0", - "@svgr/plugin-jsx": "^8.1.0", - "@svgr/plugin-svgo": "^8.1.0", - "path-dirname": "^1.0.2" + "p-locate": "^5.0.0" }, - "peerDependencies": { - "react-native": ">=0.59.0", - "react-native-svg": ">=12.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-native-swipe-gestures": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/react-native-swipe-gestures/-/react-native-swipe-gestures-1.0.5.tgz", - "integrity": "sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw==" + "node_modules/react-native-windows/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true }, - "node_modules/react-native-vector-icons": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.0.3.tgz", - "integrity": "sha512-ZgVlV5AdQgnPHHvBEihGf2xwyziT1acpXV1U+WfCgCv3lcEeCRsmwAsBU+kUSNsU+8TcWVsX04kdI6qUaS8D7w==", + "node_modules/react-native-windows/node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "peer": true, "dependencies": { - "prop-types": "^15.7.2", - "yargs": "^16.1.1" + "is-wsl": "^1.1.0" }, - "bin": { - "fa-upgrade.sh": "bin/fa-upgrade.sh", - "fa5-upgrade": "bin/fa5-upgrade.sh", - "fa6-upgrade": "bin/fa6-upgrade.sh", - "generate-icon": "bin/generate-icon.js" + "engines": { + "node": ">=8" } }, - "node_modules/react-native-vector-icons/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "node_modules/react-native-windows/node_modules/open/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/react-native-vector-icons/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/react-native-windows/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "peer": true, "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "p-limit": "^3.0.2" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-native-vector-icons/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/react-native-video": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/react-native-video/-/react-native-video-5.2.1.tgz", - "integrity": "sha512-aJlr9MeTuQ0LpZ4n+EC9RvhoKeiPbLtI2Rxy8u7zo/wzGevbRpWHSBj9xZ5YDBXnAVXzuqyNIkGhdw7bfdIBZw==", + "node_modules/react-native-windows/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "peer": true, "dependencies": { - "deprecated-react-native-prop-types": "^2.2.0", - "keymirror": "^0.1.1", - "prop-types": "^15.7.2", - "shaka-player": "^2.5.9" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" } }, - "node_modules/react-native-video/node_modules/deprecated-react-native-prop-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz", - "integrity": "sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA==", + "node_modules/react-native-windows/node_modules/react-devtools-core": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", + "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", + "peer": true, "dependencies": { - "@react-native/normalize-color": "*", - "invariant": "*", - "prop-types": "*" + "shell-quote": "^1.6.1", + "ws": "^7" } }, - "node_modules/react-native-walkthrough-tooltip": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/react-native-walkthrough-tooltip/-/react-native-walkthrough-tooltip-1.6.0.tgz", - "integrity": "sha512-8DHpcqsF+2VULYnKJCSZtllhlFUFiZcWCwOlw5RLkS451ElxPWJn9ShOFVZtkPMcwQAirq3SovumVM7Y/li0Fw==", - "dependencies": { - "prop-types": "^15.6.1", - "react-fast-compare": "^2.0.4" + "node_modules/react-native-windows/node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "peer": true, + "engines": { + "node": ">=8.3.0" }, "peerDependencies": { - "@types/react": ">=16.8.24" + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/react-native-webrtc": { - "version": "111.0.6", - "resolved": "https://registry.npmjs.org/react-native-webrtc/-/react-native-webrtc-111.0.6.tgz", - "integrity": "sha512-uxaczOCsSOe3Olzg4w9PJpK1T+Kv45aerNlcehWClvTZ3NqSebarPuKKnrd1uuFK5bb8TVvWvq5h5qZMa2pNUw==", + "node_modules/react-native-windows/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "peer": true + }, + "node_modules/react-native-windows/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "peer": true + }, + "node_modules/react-native-windows/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "peer": true, "dependencies": { - "base64-js": "1.5.1", - "debug": "4.3.4", - "event-target-shim": "6.0.2" + "ansi-regex": "^4.1.0" }, - "peerDependencies": { - "react-native": ">=0.60.0" + "engines": { + "node": ">=6" } }, - "node_modules/react-native-webrtc/node_modules/event-target-shim": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", - "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", + "node_modules/react-native-windows/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=6" } }, - "node_modules/react-native-webview": { - "version": "13.8.4", - "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.8.4.tgz", - "integrity": "sha512-dFoM9EfkAb++ZzycZyKRnjZtNUn85cf6bWp1iBlkgyNml7ULzR1gfaPT3qESoA3K1RfTmf5Xhw0M2In2A3a3wg==", + "node_modules/react-native-windows/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, "dependencies": { - "escape-string-regexp": "2.0.0", - "invariant": "2.2.4" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "react": "*", - "react-native": "*" + "engines": { + "node": ">=8" } }, - "node_modules/react-native-webview/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/react-native-windows/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "peer": true, "engines": { - "node": ">=8" + "node": ">= 4.0.0" + } + }, + "node_modules/react-native-windows/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" } }, "node_modules/react-native/node_modules/@jest/types": { @@ -17537,6 +24664,12 @@ "node": ">= 10.14.2" } }, + "node_modules/react-native/node_modules/@react-native/normalize-colors": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.87.tgz", + "integrity": "sha512-Xh7Nyk/MPefkb0Itl5Z+3oOobeG9lfLb7ZOY2DKpFnoCE1TzBmib9vMNdFaLdSxLIP+Ec6icgKtdzYg8QUPYzA==", + "license": "MIT" + }, "node_modules/react-native/node_modules/@types/yargs": { "version": "15.0.19", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", @@ -17612,35 +24745,6 @@ "node": ">= 10" } }, - "node_modules/react-native/node_modules/react-devtools-core": { - "version": "4.28.5", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", - "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/react-native/node_modules/react-devtools-core/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/react-native/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -17663,17 +24767,17 @@ } }, "node_modules/react-native/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", "dependencies": { "async-limiter": "~1.0.0" } }, "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "engines": { "node": ">=0.10.0" } @@ -17710,7 +24814,6 @@ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.2.0.tgz", "integrity": "sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==", "dev": true, - "peer": true, "dependencies": { "react-is": "^18.2.0", "react-shallow-renderer": "^16.15.0", @@ -17721,18 +24824,16 @@ } }, "node_modules/react-test-renderer/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true, - "peer": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true }, "node_modules/react-test-renderer/node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, - "peer": true, "dependencies": { "loose-envify": "^1.1.0" } @@ -17800,20 +24901,6 @@ "node": ">= 0.10" } }, - "node_modules/recyclerlistview": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/recyclerlistview/-/recyclerlistview-4.2.0.tgz", - "integrity": "sha512-uuBCi0c+ggqHKwrzPX4Z/mJOzsBbjZEAwGGmlwpD/sD7raXixdAbdJ6BTcAmuWG50Cg4ru9p12M94Njwhr/27A==", - "dependencies": { - "lodash.debounce": "4.0.8", - "prop-types": "15.8.1", - "ts-object-utils": "0.0.5" - }, - "peerDependencies": { - "react": ">= 15.2.1", - "react-native": ">= 0.30.0" - } - }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -17896,14 +24983,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/refractor/node_modules/prismjs": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", - "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", - "engines": { - "node": ">=6" - } - }, "node_modules/refractor/node_modules/property-information": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", @@ -18006,6 +25085,12 @@ "jsesc": "bin/jsesc" } }, + "node_modules/remove-trailing-slash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", + "license": "MIT" + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -18018,16 +25103,51 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/require-in-the-middle": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.3.0.tgz", + "integrity": "sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw==", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, + "node_modules/requireg": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", + "dependencies": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/requireg/node_modules/resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "license": "MIT", + "dependencies": { + "path-parse": "^1.0.5" + } + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -18071,7 +25191,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, "engines": { "node": ">=8" } @@ -18080,7 +25199,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, "engines": { "node": ">=10" } @@ -18097,20 +25215,10 @@ "node": ">=8" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -18134,7 +25242,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -18187,7 +25294,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "dev": true, "optional": true }, "node_modules/safe-regex-test": { @@ -18206,13 +25312,28 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, "dependencies": { - "truncate-utf8-bytes": "^1.0.0" + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" } }, "node_modules/scheduler": { @@ -18242,36 +25363,31 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@types/node-forge": "^1.3.0", + "node-forge": "^1" }, "engines": { "node": ">=10" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -18343,57 +25459,117 @@ "node": ">= 0.8" } }, - "node_modules/serialize-error": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", - "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "peer": true, "dependencies": { - "type-fest": "^0.20.2" + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, + "node_modules/serve-static/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-static/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { - "node": ">=10" + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "peer": true, + "node_modules/serve-static/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { - "randombytes": "^2.1.0" + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "node_modules/serve-static/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -18429,20 +25605,16 @@ "node": ">= 0.4" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "node_modules/shaka-player": { - "version": "2.5.23", - "resolved": "https://registry.npmjs.org/shaka-player/-/shaka-player-2.5.23.tgz", - "integrity": "sha512-3MC9k0OXJGw8AZ4n/ZNCZS2yDxx+3as5KgH6Tx4Q5TRboTBBCu6dYPI5vp1DxKeyU12MBN1Zcbs7AKzXv2EnCg==", - "deprecated": "Shaka Player < v4.2 is no longer supported.", - "dependencies": { - "eme-encryption-scheme-polyfill": "^2.0.1" - } - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -18465,22 +25637,66 @@ "node": ">=8" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "peer": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "peer": true, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/shelljs/node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "peer": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "peer": true + }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -18503,6 +25719,26 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/simple-plist": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", + "license": "MIT", + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, + "node_modules/simple-plist/node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "license": "MIT", + "dependencies": { + "stream-buffers": "2.2.x" + } + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -18543,14 +25779,12 @@ "node": ">=6" } }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "engines": { + "node": ">=8.0.0" } }, "node_modules/sort-json": { @@ -18588,7 +25822,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -18632,10 +25866,23 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "node_modules/split-on-first": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "license": "MIT", "engines": { "node": ">=6" } @@ -18650,6 +25897,42 @@ "resolved": "https://registry.npmjs.org/sql-escape-string/-/sql-escape-string-1.1.0.tgz", "integrity": "sha512-/kqO4pLZSLfV0KsBM2xkVh2S3GbjJJone37d7gYwLyP0c+REh3vnmkhQ7VwNrX76igC0OhJWpTg0ukkdef9vvA==" }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/stack-chain": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", + "integrity": "sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug==", + "peer": true + }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -18674,6 +25957,36 @@ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" }, + "node_modules/stacktrace-gps": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", + "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", + "dev": true, + "dependencies": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + } + }, + "node_modules/stacktrace-gps/node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "dev": true, + "dependencies": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, "node_modules/stacktrace-parser": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", @@ -18712,25 +26025,20 @@ "node": ">= 0.4" } }, - "node_modules/stream-chain": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", - "dev": true - }, - "node_modules/stream-json": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", - "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", - "dev": true, - "dependencies": { - "stream-chain": "^2.2.5" + "node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", + "license": "Unlicense", + "engines": { + "node": ">= 0.10.0" } }, "node_modules/strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "license": "MIT", "engines": { "node": ">=4" } @@ -18775,6 +26083,36 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -18880,6 +26218,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -18889,6 +26240,14 @@ "node": ">=8" } }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -18926,10 +26285,76 @@ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, + "node_modules/structured-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/sudo-prompt": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==" }, "node_modules/supports-color": { "version": "5.5.0", @@ -18942,6 +26367,40 @@ "node": ">=4" } }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -18953,87 +26412,90 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "node_modules/svgo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", - "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, + "license": "MIT", + "peer": true, "engines": { - "node": ">=14.0.0" + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" + "engines": { + "node": ">=10" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">= 10" + "node": ">= 8" } }, - "node_modules/svgo/node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/svgo/node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "peer": true, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/telnet-client": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/telnet-client/-/telnet-client-1.2.8.tgz", - "integrity": "sha512-W+w4k3QAmULVNhBVT2Fei369kGZCh/TH25M7caJAXW+hLxwoQRuw0di3cX4l0S9fgH3Mvq7u+IFMoBDpEw/eIg==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.4" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/kozjak" - } + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" }, "node_modules/temp": { "version": "0.8.4", @@ -19065,36 +26527,51 @@ "rimraf": "bin.js" } }, - "node_modules/tempfile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", - "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==", - "dev": true, + "node_modules/tempy": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", + "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", + "license": "MIT", "dependencies": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tempfile/node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tempfile/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/terser": { @@ -19287,14 +26764,38 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } }, "node_modules/throat": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -19313,7 +26814,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -19354,9 +26854,9 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, "dependencies": { "psl": "^1.1.33", @@ -19382,18 +26882,6 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/trace-event-lib": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/trace-event-lib/-/trace-event-lib-1.4.1.tgz", - "integrity": "sha512-TOgFolKG8JFY+9d5EohGWMvwvteRafcyfPWWNIqcuD1W/FUvxWcy2MSCZ/beYHM63oYPHYHCd3tkbgCctHVP7w==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/transformation-matrix": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/transformation-matrix/-/transformation-matrix-2.16.1.tgz", @@ -19402,13 +26890,21 @@ "url": "https://github.com/sponsors/chrvadala" } }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dev": true, + "node_modules/traverse": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", + "integrity": "sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==", + "license": "MIT", "dependencies": { - "utf8-byte-length": "^1.0.1" + "gopd": "^1.0.1", + "typedarray.prototype.slice": "^1.0.3", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ts-api-utils": { @@ -19423,13 +26919,20 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.2.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", + "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "0.x", + "ejs": "^3.1.10", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", "json5": "^2.2.3", @@ -19442,10 +26945,11 @@ "ts-jest": "cli.js" }, "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", @@ -19455,6 +26959,9 @@ "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -19466,11 +26973,6 @@ } } }, - "node_modules/ts-object-utils": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/ts-object-utils/-/ts-object-utils-0.0.5.tgz", - "integrity": "sha512-iV0GvHqOmilbIKJsfyfJY9/dNHCs969z3so90dQWsO1eMMozvTpnB1MEaUbb3FYtZTGjv5sIy/xmslEz0Rg2TA==" - }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -19554,7 +27056,6 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, "engines": { "node": ">=10" }, @@ -19631,11 +27132,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", + "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-offset": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "devOptional": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19644,6 +27166,28 @@ "node": ">=14.17" } }, + "node_modules/ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -19699,6 +27243,42 @@ "node": ">=4" } }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/unit-compare": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unit-compare/-/unit-compare-1.0.1.tgz", @@ -19712,85 +27292,226 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, "engines": { "node": ">= 10.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==", + "license": "MIT" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-latest-callback": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.2.1.tgz", + "integrity": "sha512-QWlq8Is8BGWBf883QOEQP5HWYX/kMI+JTbJ5rdtvJLmXTIh9XoHIO3PQcmQl8BU44VKxow1kbQUHa6mQSMALDQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/username": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/username/-/username-5.1.0.tgz", + "integrity": "sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg==", + "peer": true, + "dependencies": { + "execa": "^1.0.0", + "mem": "^4.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/username/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/username/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/username/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/username/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/username/node_modules/mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "peer": true, + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/username/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/username/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, + "node_modules/username/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "peer": true, "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "semver": "bin/semver" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, + "node_modules/username/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, "dependencies": { - "punycode": "^2.1.0" + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "node_modules/username/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/use-latest-callback": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.9.tgz", - "integrity": "sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw==", - "peerDependencies": { - "react": ">=16.8" + "node_modules/username/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", - "dev": true - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -19805,9 +27526,9 @@ } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", @@ -19831,10 +27552,24 @@ "node": ">=10.12.0" } }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, "node_modules/validator": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", - "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", "engines": { "node": ">= 0.10" } @@ -19852,6 +27587,18 @@ "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -19893,22 +27640,22 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.91.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", - "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", + "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.16.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -20093,11 +27840,32 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-fetch": { "version": "3.6.20", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -20107,6 +27875,27 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/whatwg-url-without-unicode": { + "version": "8.0.0-3", + "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", + "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", + "dependencies": { + "buffer": "^5.4.3", + "punycode": "^2.1.1", + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -20213,6 +28002,12 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/wonka": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", + "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==", + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -20229,6 +28024,57 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -20278,9 +28124,9 @@ } }, "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -20297,10 +28143,117 @@ } } }, - "node_modules/xdate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/xdate/-/xdate-0.8.2.tgz", - "integrity": "sha512-sNBlLfOC8S3V0vLDEUianQOXcTsc9j4lfeKU/klHe0RjHAYn0CXsSttumTot8dzalboV8gZbH38B+WcCIBjhFQ==" + "node_modules/xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "license": "Apache-2.0", + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/xml-formatter": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.6.1.tgz", + "integrity": "sha512-dOiGwoqm8y22QdTNI7A+N03tyVfBlQ0/oehAzxIZtwnFAHGeSlrfjF73YQvzSsa/Kt6+YZasKsrdu6OIpuBggw==", + "peer": true, + "dependencies": { + "xml-parser-xo": "^3.2.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xml-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/xml-parser/-/xml-parser-1.2.1.tgz", + "integrity": "sha512-lPUzzmS0zdwcNtyNndCl2IwH172ozkUDqmfmH3FcuDzHVl552Kr6oNfsvteHabqTWhsrMgpijqZ/yT7Wo1/Pzw==", + "peer": true, + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/xml-parser-xo": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.2.0.tgz", + "integrity": "sha512-8LRU6cq+d7mVsoDaMhnkkt3CTtAs4153p49fRo+HIB3I1FD1o5CeXRjRH29sQevIfVJIcPjKSsPU/+Ujhq09Rg==", + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/xml-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/xml-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/xml2js": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", + "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true }, "node_modules/xmldom-sre": { "version": "0.1.31", @@ -20310,6 +28263,15 @@ "node": ">=0.1" } }, + "node_modules/xpath": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==", + "peer": true, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/xregexp": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.0.tgz", @@ -20380,33 +28342,6 @@ "node": ">=12" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -20419,9 +28354,9 @@ } }, "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 0b5ce2676b9..3d0ebd450d8 100644 --- a/package.json +++ b/package.json @@ -1,170 +1,168 @@ { "name": "mattermost-mobile", - "version": "2.17.0", + "version": "2.22.0", "description": "Mattermost Mobile with React Native", "repository": "git@github.com:mattermost/mattermost-mobile.git", "author": "Mattermost, Inc.", "license": "Apache 2.0", "private": true, "engines": { - "node": "^18.10.0", - "npm": "^9.0.0" + "node": "^18.18.0 || ^20.0.0", + "npm": "^9 || ^10" }, "dependencies": { - "@formatjs/intl-datetimeformat": "6.12.3", + "@formatjs/intl-datetimeformat": "6.12.5", "@formatjs/intl-getcanonicallocales": "2.3.0", - "@formatjs/intl-listformat": "7.5.5", - "@formatjs/intl-locale": "3.4.5", - "@formatjs/intl-numberformat": "8.10.1", - "@formatjs/intl-pluralrules": "5.2.12", - "@gorhom/bottom-sheet": "4.6.1", - "@mattermost/calls": "github:mattermost/calls-common#cc5e65f6c103138fd013d6fa45eb33bfe7544f2a", - "@mattermost/compass-icons": "0.1.44", - "@mattermost/react-native-emm": "1.4.1", - "@mattermost/react-native-network-client": "1.5.1", - "@mattermost/react-native-paste-input": "0.7.1", - "@mattermost/react-native-turbo-log": "0.3.2", + "@formatjs/intl-listformat": "7.5.7", + "@formatjs/intl-locale": "4.0.0", + "@formatjs/intl-numberformat": "8.10.3", + "@formatjs/intl-pluralrules": "5.2.14", + "@gorhom/bottom-sheet": "4.6.4", + "@mattermost/calls": "github:mattermost/calls-common#07607cf603f1e3f0c86ae248b2332e8da17f9cf8", + "@mattermost/compass-icons": "0.1.45", + "@mattermost/hardware-keyboard": "file:./libraries/@mattermost/hardware-keyboard", + "@mattermost/keyboard-tracker": "file:./libraries/@mattermost/keyboard-tracker", + "@mattermost/react-native-emm": "1.5.0", + "@mattermost/react-native-network-client": "1.7.2", + "@mattermost/react-native-paste-input": "0.8.0", + "@mattermost/react-native-turbo-log": "0.4.0", + "@mattermost/rnshare": "file:./libraries/@mattermost/rnshare", + "@mattermost/rnutils": "file:./libraries/@mattermost/rnutils", "@msgpack/msgpack": "2.8.0", "@nozbe/watermelondb": "0.27.1", - "@react-native-camera-roll/camera-roll": "7.5.2", - "@react-native-clipboard/clipboard": "1.13.2", - "@react-native-community/datetimepicker": "7.6.4", - "@react-native-community/netinfo": "11.3.1", + "@react-native-camera-roll/camera-roll": "7.8.3", + "@react-native-clipboard/clipboard": "1.14.1", + "@react-native-community/datetimepicker": "8.2.0", + "@react-native-community/netinfo": "11.3.2", "@react-native-cookies/cookies": "6.2.1", - "@react-navigation/bottom-tabs": "6.5.20", - "@react-navigation/native": "6.1.17", - "@react-navigation/stack": "6.3.29", - "@sentry/react-native": "5.20.0", + "@react-navigation/bottom-tabs": "6.6.1", + "@react-navigation/native": "6.1.18", + "@react-navigation/stack": "6.4.1", + "@rneui/base": "4.0.0-rc.8", + "@sentry/react-native": "5.33.2", "@stream-io/flat-list-mvcp": "0.10.3", "@voximplant/react-native-foreground-service": "3.0.2", "base-64": "1.0.0", - "commonmark": "npm:@mattermost/commonmark@0.30.1-2", + "commonmark": "npm:@mattermost/commonmark@0.30.1-3", "commonmark-react-renderer": "github:mattermost/commonmark-react-renderer#81b5d27509652bae50b4b510ede777dd3bd923cf", "deep-equal": "2.2.3", "deepmerge": "4.3.1", "emoji-regex": "10.3.0", + "expo": "51.0.24", + "expo-application": "5.9.1", + "expo-crypto": "13.0.2", + "expo-device": "6.0.2", + "expo-image": "1.12.13", + "expo-linear-gradient": "13.0.2", + "expo-store-review": "7.0.2", + "expo-video-thumbnails": "8.0.0", + "expo-web-browser": "13.0.3", + "fflate": "0.8.2", "fuse.js": "7.0.0", "html-entities": "2.5.2", - "jail-monkey": "2.8.0", - "mime-db": "1.52.0", + "mime-db": "1.53.0", "moment-timezone": "0.5.45", - "pako": "2.1.0", - "path-to-regexp": "6.2.2", + "node-html-parser": "6.1.13", + "path-to-regexp": "8.1.0", "react": "18.2.0", "react-freeze": "1.0.4", - "react-intl": "6.6.5", - "react-native": "0.73.6", + "react-intl": "6.6.8", + "react-native": "0.74.5", "react-native-background-timer": "2.4.1", - "react-native-button": "3.1.0", - "react-native-calendars": "1.1304.1", - "react-native-create-thumbnail": "1.6.4", - "react-native-device-info": "10.13.1", - "react-native-document-picker": "9.1.1", + "react-native-document-picker": "9.3.0", "react-native-dotenv": "3.4.11", - "react-native-elements": "3.4.3", "react-native-exception-handler": "2.10.10", - "react-native-fast-image": "8.6.3", "react-native-file-viewer": "2.1.5", - "react-native-fs": "2.20.0", - "react-native-gesture-handler": "2.16.0", + "react-native-gesture-handler": "2.18.1", "react-native-haptic-feedback": "2.2.0", - "react-native-hw-keyboard-event": "0.0.4", "react-native-image-picker": "7.1.2", - "react-native-in-app-review": "4.3.3", "react-native-incall-manager": "4.2.0", "react-native-keyboard-aware-scroll-view": "0.9.5", - "react-native-keyboard-tracking-view": "5.7.0", "react-native-keychain": "8.2.0", - "react-native-linear-gradient": "2.8.3", - "react-native-localize": "3.1.0", + "react-native-localize": "3.2.1", "react-native-math-view": "3.9.5", - "react-native-navigation": "7.39.1", + "react-native-navigation": "7.40.1", "react-native-notifications": "5.1.0", + "react-native-performance": "5.1.2", "react-native-permissions": "4.1.5", - "react-native-reanimated": "3.8.1", - "react-native-safe-area-context": "4.9.0", - "react-native-screens": "3.30.1", + "react-native-reanimated": "3.14.0", + "react-native-safe-area-context": "4.10.8", + "react-native-screens": "3.34.0", "react-native-section-list-get-item-layout": "2.2.3", - "react-native-shadow-2": "7.0.8", - "react-native-share": "10.1.0", - "react-native-svg": "15.1.0", - "react-native-vector-icons": "10.0.3", - "react-native-video": "5.2.1", + "react-native-shadow-2": "7.1.0", + "react-native-share": "10.2.1", + "react-native-svg": "15.4.0", + "react-native-vector-icons": "10.1.0", + "react-native-video": "6.4.3", "react-native-walkthrough-tooltip": "1.6.0", - "react-native-webrtc": "111.0.6", - "react-native-webview": "13.8.4", + "react-native-webrtc": "124.0.3", "react-syntax-highlighter": "15.5.0", - "semver": "7.6.0", + "semver": "7.6.3", "tinycolor2": "1.6.0", "url-parse": "1.5.10" }, "devDependencies": { - "@babel/cli": "7.24.1", - "@babel/core": "7.24.4", - "@babel/eslint-parser": "7.24.1", + "@babel/cli": "7.24.8", + "@babel/core": "7.25.2", + "@babel/eslint-parser": "7.25.1", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-proposal-decorators": "7.24.1", - "@babel/plugin-transform-flow-strip-types": "7.24.1", - "@babel/plugin-transform-runtime": "7.24.3", - "@babel/preset-env": "7.24.4", - "@babel/preset-typescript": "7.24.1", - "@babel/register": "7.23.7", - "@babel/runtime": "7.24.4", - "@react-native/babel-preset": "0.73.21", - "@react-native/eslint-config": "0.73.2", - "@react-native/metro-config": "0.73.5", - "@react-native/typescript-config": "0.73.1", + "@babel/plugin-proposal-decorators": "7.24.7", + "@babel/plugin-transform-flow-strip-types": "7.25.2", + "@babel/plugin-transform-runtime": "7.24.7", + "@babel/preset-env": "7.25.3", + "@babel/preset-typescript": "7.24.7", + "@babel/register": "7.24.6", + "@babel/runtime": "7.25.0", + "@react-native/babel-preset": "0.74.87", + "@react-native/eslint-config": "0.74.87", + "@react-native/metro-config": "0.74.87", + "@react-native/typescript-config": "0.74.87", "@testing-library/react-hooks": "8.0.1", - "@testing-library/react-native": "12.4.5", + "@testing-library/react-native": "12.5.2", "@types/base-64": "1.0.2", "@types/commonmark": "0.27.9", "@types/commonmark-react-renderer": "4.3.4", "@types/deep-equal": "1.0.4", "@types/jest": "29.5.12", - "@types/lodash": "4.17.0", + "@types/lodash": "4.17.7", "@types/mime-db": "1.43.5", "@types/pako": "2.0.3", "@types/querystringify": "2.0.2", - "@types/react": "18.2.77", + "@types/react": "18.3.3", "@types/react-native-background-timer": "2.0.2", - "@types/react-native-button": "3.0.5", "@types/react-native-dotenv": "0.2.2", "@types/react-native-share": "3.3.8", - "@types/react-native-video": "5.0.20", - "@types/react-syntax-highlighter": "15.5.11", + "@types/react-syntax-highlighter": "15.5.13", "@types/semver": "7.5.8", "@types/tinycolor2": "1.4.6", "@types/tough-cookie": "4.0.5", "@types/url-parse": "1.4.11", - "@types/uuid": "9.0.8", - "@typescript-eslint/eslint-plugin": "6.21.0", - "@typescript-eslint/parser": "6.21.0", - "axios": "1.6.8", - "axios-cookiejar-support": "5.0.1", + "@types/uuid": "10.0.0", + "@typescript-eslint/eslint-plugin": "7.13.1", + "@typescript-eslint/parser": "7.13.1", "babel-jest": "29.7.0", "babel-loader": "9.1.3", - "babel-plugin-module-resolver": "5.0.0", - "detox": "20.20.1", + "babel-plugin-module-resolver": "5.0.2", "eslint": "8.57.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.29.1", - "eslint-plugin-jest": "28.2.0", - "eslint-plugin-react": "7.34.1", - "eslint-plugin-react-hooks": "4.6.0", - "husky": "9.0.11", + "eslint-plugin-jest": "28.7.0", + "eslint-plugin-react": "7.35.0", + "eslint-plugin-react-hooks": "4.6.2", + "husky": "9.1.4", "isomorphic-fetch": "3.0.0", "jest": "29.7.0", "jest-cli": "29.7.0", + "jest-expo": "51.0.3", "jetifier": "2.0.0", "mmjstool": "github:mattermost/mattermost-utilities#83b1b311972b8f5e750aae4019457a40abb5aa44", "nock": "13.5.4", "patch-package": "8.0.0", - "react-devtools-core": "5.0.2", - "react-native-svg-transformer": "1.3.0", - "tough-cookie": "4.1.3", - "ts-jest": "29.1.2", - "typescript": "5.3.3", - "uuid": "9.0.1" + "react-devtools-core": "5.3.1", + "tough-cookie": "4.1.4", + "ts-jest": "29.2.4", + "typescript": "5.5.4", + "uuid": "10.0.0" }, "scripts": { "android": "react-native run-android", @@ -182,12 +180,12 @@ "i18n-clean-empty": "npm run mmjstool -- i18n clean-empty --mobile-dir .", "i18n-extract": "npm run mmjstool -- i18n extract-mobile", "ios": "react-native run-ios", - "ios-gems": "cd ios && bundle install", - "ios-gems-m1": "cd ios && arch -arm64 bundle install", + "ios-gems": "bundle install", + "ios-gems-m1": "arch -arm64 bundle install", "lint": "eslint --ignore-path .gitignore --ignore-pattern node_modules --quiet .", "mmjstool": "mmjstool", - "pod-install": "cd ios && pod install", - "pod-install-m1": "cd ios && arch -x86_64 pod install", + "pod-install": "cd ios && RCT_NEW_ARCH_ENABLED=0 pod install", + "pod-install-m1": "cd ios && RCT_NEW_ARCH_ENABLED=0 arch -x86_64 pod install", "postinstall": "patch-package && ./scripts/postinstall.sh", "prepare": "husky", "preinstall": "./scripts/preinstall.sh && npx solidarity", @@ -199,10 +197,35 @@ "updatesnapshot": "jest --updateSnapshot" }, "overrides": { + "@testing-library/react-native": { + "react": "^18.2.0" + }, "@testing-library/react-hooks": { "@types/react": "^18.2.37", "react": "^18.2.0", "react-test-renderer": "^18.2.0" + }, + "@react-native-community/datetimepicker": { + "react-native": "^0.74.2" + }, + "@react-native/eslint-config": { + "@typescript-eslint/eslint-plugin": "^7.12.0", + "@typescript-eslint/parser": "^7.12.0" + }, + "@react-native-clipboard/clipboard": { + "react-native": "^0.74.2" + }, + "react-native-windows": { + "react-native": "^0.74.2" + } + }, + "expo": { + "autolinking": { + "exclude": [ + "expo-keep-awake", + "expo-asset", + "expo-font" + ] } } } diff --git a/patches/@gorhom+bottom-sheet+4.6.1.patch b/patches/@gorhom+bottom-sheet+4.6.1.patch deleted file mode 100644 index edf3002b05a..00000000000 --- a/patches/@gorhom+bottom-sheet+4.6.1.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/node_modules/@gorhom/bottom-sheet/src/hooks/useBottomSheetTimingConfigs.ts b/node_modules/@gorhom/bottom-sheet/src/hooks/useBottomSheetTimingConfigs.ts -index 9d2f61d..ac91e40 100644 ---- a/node_modules/@gorhom/bottom-sheet/src/hooks/useBottomSheetTimingConfigs.ts -+++ b/node_modules/@gorhom/bottom-sheet/src/hooks/useBottomSheetTimingConfigs.ts -@@ -1,5 +1,5 @@ - import { useMemo } from 'react'; --import type { WithTimingConfig } from 'react-native-reanimated'; -+import { ReduceMotion, type WithTimingConfig } from 'react-native-reanimated'; - import { ANIMATION_DURATION, ANIMATION_EASING } from '../constants'; - - /** -@@ -14,6 +14,7 @@ export const useBottomSheetTimingConfigs = (configs: WithTimingConfig) => { - const _configs: WithTimingConfig = { - easing: configs.easing || ANIMATION_EASING, - duration: configs.duration || ANIMATION_DURATION, -+ reduceMotion: ReduceMotion.Never, - }; - - return _configs; -diff --git a/node_modules/@gorhom/bottom-sheet/src/utilities/animate.ts b/node_modules/@gorhom/bottom-sheet/src/utilities/animate.ts -index 0ce4c9a..c01a069 100644 ---- a/node_modules/@gorhom/bottom-sheet/src/utilities/animate.ts -+++ b/node_modules/@gorhom/bottom-sheet/src/utilities/animate.ts -@@ -4,6 +4,7 @@ import { - withTiming, - withSpring, - AnimationCallback, -+ ReduceMotion, - } from 'react-native-reanimated'; - import { ANIMATION_CONFIGS, ANIMATION_METHOD } from '../constants'; - -@@ -26,6 +27,8 @@ export const animate = ({ - configs = ANIMATION_CONFIGS; - } - -+ configs = {...configs, reduceMotion: ReduceMotion.Never}; -+ - // detect animation type - const type = - 'duration' in configs || 'easing' in configs diff --git a/patches/@nozbe+watermelondb+0.27.1.patch b/patches/@nozbe+watermelondb+0.27.1.patch index c5d98d1fc7f..95909b16736 100644 --- a/patches/@nozbe+watermelondb+0.27.1.patch +++ b/patches/@nozbe+watermelondb+0.27.1.patch @@ -369,8 +369,23 @@ index 027c366..5807e79 100644 // Performs work on the underlying database - see concrete DatabaseAdapter implementation for more details unsafeExecute(work: UnsafeExecuteOperations, callback: ResultCallback): void +diff --git a/node_modules/@nozbe/watermelondb/native/android-jsi/src/main/java/com/nozbe/watermelondb/jsi/JSIInstaller.java b/node_modules/@nozbe/watermelondb/native/android-jsi/src/main/java/com/nozbe/watermelondb/jsi/JSIInstaller.java +index 055cede..fb7ca33 100755 +--- a/node_modules/@nozbe/watermelondb/native/android-jsi/src/main/java/com/nozbe/watermelondb/jsi/JSIInstaller.java ++++ b/node_modules/@nozbe/watermelondb/native/android-jsi/src/main/java/com/nozbe/watermelondb/jsi/JSIInstaller.java +@@ -1,8 +1,8 @@ + package com.nozbe.watermelondb.jsi; + + import android.content.Context; +-class JSIInstaller { +- static void install(Context context, long javaScriptContextHolder) { ++public class JSIInstaller { ++ public static void install(Context context, long javaScriptContextHolder) { + JSIInstaller.context = context; + new JSIInstaller().installBinding(javaScriptContextHolder); + diff --git a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/WMDatabase.java b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/WMDatabase.java -index 2f170e0..bac0352 100644 +index 2f170e0..bd87f92 100644 --- a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/WMDatabase.java +++ b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/WMDatabase.java @@ -11,6 +11,8 @@ import java.util.Arrays; @@ -414,17 +429,19 @@ index 2f170e0..bac0352 100644 } else { // On some systems there is some kind of lock on `/databases` folder ¯\_(ツ)_/¯ path = context.getDatabasePath("" + name + ".db").getPath().replace("/databases", ""); -@@ -172,6 +190,10 @@ public class WMDatabase { +@@ -172,7 +190,11 @@ public class WMDatabase { }); } +- interface TransactionFunction { + public void unsafeVacuum() { + execute("vacuum"); + } + - interface TransactionFunction { ++ public interface TransactionFunction { void applyTransactionFunction(); } + diff --git a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/WMDatabaseBridge.java b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/WMDatabaseBridge.java index 117b2bc..57e4abb 100644 --- a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/WMDatabaseBridge.java diff --git a/patches/@react-native-community+netinfo+11.3.1.patch b/patches/@react-native-community+netinfo+11.3.2.patch similarity index 100% rename from patches/@react-native-community+netinfo+11.3.1.patch rename to patches/@react-native-community+netinfo+11.3.2.patch diff --git a/patches/@rneui+base+4.0.0-rc.8.patch b/patches/@rneui+base+4.0.0-rc.8.patch new file mode 100644 index 00000000000..29ec2ad7354 --- /dev/null +++ b/patches/@rneui+base+4.0.0-rc.8.patch @@ -0,0 +1,66 @@ +diff --git a/node_modules/@rneui/base/dist/SearchBar/SearchBar-android.js b/node_modules/@rneui/base/dist/SearchBar/SearchBar-android.js +index c5a574c..e2362e3 100644 +--- a/node_modules/@rneui/base/dist/SearchBar/SearchBar-android.js ++++ b/node_modules/@rneui/base/dist/SearchBar/SearchBar-android.js +@@ -12,6 +12,7 @@ var __rest = (this && this.__rest) || function (s, e) { + import React, { Component } from 'react'; + import { StyleSheet, View, ActivityIndicator, Keyboard, } from 'react-native'; + import { defaultTheme, renderNode } from '../helpers'; ++import {Commands} from 'react-native/Libraries/Components/TextInput/AndroidTextInputNativeComponent'; + import { Input } from '../Input'; + import { Icon } from '../Icon'; + const defaultSearchIcon = (theme) => { +@@ -59,6 +60,13 @@ export class SearchBarAndroid extends Component { + this.blur(); + this.props.onCancel(); + }; ++ this.setSelection = (start, end) => { ++ if (Commands.setTextAndSelection && this.input.input) { ++ Commands.setTextAndSelection(this.input.input, ++ 0, null, start, end ++ ) ++ } ++ }; + this.onFocus = (event) => { + this.props.onFocus(event); + this.setState({ +diff --git a/node_modules/@rneui/base/dist/SearchBar/SearchBar-ios.js b/node_modules/@rneui/base/dist/SearchBar/SearchBar-ios.js +index 46e6b31..1446a66 100644 +--- a/node_modules/@rneui/base/dist/SearchBar/SearchBar-ios.js ++++ b/node_modules/@rneui/base/dist/SearchBar/SearchBar-ios.js +@@ -11,6 +11,7 @@ var __rest = (this && this.__rest) || function (s, e) { + }; + import React, { Component } from 'react'; + import { Pressable, LayoutAnimation, StyleSheet, View, ActivityIndicator, Text, } from 'react-native'; ++import {Commands} from 'react-native/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent'; + import { Input } from '../Input'; + import { Icon } from '../Icon'; + import { defaultTheme, renderNode } from '../helpers'; +@@ -46,6 +47,13 @@ export class SearchBarIOS extends Component { + this.onChangeText(''); + this.props.onClear(); + }; ++ this.setSelection = (start, end) => { ++ if (Commands.setTextAndSelection && this.input.input) { ++ Commands.setTextAndSelection(this.input.input, ++ 0, null, start, end ++ ) ++ } ++ }; + this.cancel = () => { + this.onChangeText(''); + if (this.props.showCancel) { +diff --git a/node_modules/@rneui/base/dist/SearchBar/SearchBar.js b/node_modules/@rneui/base/dist/SearchBar/SearchBar.js +index 17e1b3a..dd28cdc 100644 +--- a/node_modules/@rneui/base/dist/SearchBar/SearchBar.js ++++ b/node_modules/@rneui/base/dist/SearchBar/SearchBar.js +@@ -23,6 +23,9 @@ export class SearchBar extends React.Component { + var _a; + (_a = this.searchBar) === null || _a === void 0 ? void 0 : _a.cancel(); + }; ++ this.setSelection = (start, end) => { ++ this.searchBar.setSelection(start, end) ++ } + } + render() { + const Component = SEARCH_BAR_COMPONENTS[this.props.platform] || SearchBarDefault; diff --git a/patches/@sentry+utils+7.100.1.patch b/patches/@sentry+utils+7.119.1.patch similarity index 100% rename from patches/@sentry+utils+7.100.1.patch rename to patches/@sentry+utils+7.119.1.patch diff --git a/patches/@types+react-syntax-highlighter+15.5.11.patch b/patches/@types+react-syntax-highlighter+15.5.13.patch similarity index 100% rename from patches/@types+react-syntax-highlighter+15.5.11.patch rename to patches/@types+react-syntax-highlighter+15.5.13.patch diff --git a/patches/expo-image+1.12.13.patch b/patches/expo-image+1.12.13.patch new file mode 100644 index 00000000000..96a62a70a8e --- /dev/null +++ b/patches/expo-image+1.12.13.patch @@ -0,0 +1,57 @@ +diff --git a/node_modules/expo-image/android/src/main/java/expo/modules/image/okhttp/ExpoImageOkHttpClientGlideModule.kt b/node_modules/expo-image/android/src/main/java/expo/modules/image/okhttp/ExpoImageOkHttpClientGlideModule.kt +index 071907c..e5c39f5 100644 +--- a/node_modules/expo-image/android/src/main/java/expo/modules/image/okhttp/ExpoImageOkHttpClientGlideModule.kt ++++ b/node_modules/expo-image/android/src/main/java/expo/modules/image/okhttp/ExpoImageOkHttpClientGlideModule.kt +@@ -70,8 +70,16 @@ data class GlideUrlWrapper(val glideUrl: GlideUrl) { + + @GlideModule + class ExpoImageOkHttpClientGlideModule : LibraryGlideModule() { ++ companion object { ++ var okHttpClient: OkHttpClient? = null ++ } ++ + override fun registerComponents(context: Context, glide: Glide, registry: Registry) { +- val client = OkHttpClient() ++ val client = if (okHttpClient != null) { ++ okHttpClient!! ++ } else { ++ OkHttpClient() ++ } + // We don't use the `GlideUrl` directly but we want to replace the default okhttp loader anyway + // to make sure that the app will use only one client. + registry.replace(GlideUrl::class.java, InputStream::class.java, OkHttpUrlLoader.Factory(client)) +diff --git a/node_modules/expo-image/ios/ExpoImage.podspec b/node_modules/expo-image/ios/ExpoImage.podspec +index de8bc65..564397d 100644 +--- a/node_modules/expo-image/ios/ExpoImage.podspec ++++ b/node_modules/expo-image/ios/ExpoImage.podspec +@@ -18,9 +18,7 @@ Pod::Spec.new do |s| + s.dependency 'ExpoModulesCore' + s.dependency 'SDWebImage', '~> 5.19.1' + s.dependency 'SDWebImageWebPCoder', '~> 0.14.6' +- s.dependency 'SDWebImageAVIFCoder', '~> 0.11.0' + s.dependency 'SDWebImageSVGCoder', '~> 1.7.0' +- s.dependency 'libavif/libdav1d' + + # Swift/Objective-C compatibility + s.pod_target_xcconfig = { +diff --git a/node_modules/expo-image/ios/ImageModule.swift b/node_modules/expo-image/ios/ImageModule.swift +index e4b7fca..5057b0a 100644 +--- a/node_modules/expo-image/ios/ImageModule.swift ++++ b/node_modules/expo-image/ios/ImageModule.swift +@@ -3,7 +3,6 @@ + import ExpoModulesCore + import SDWebImage + import SDWebImageWebPCoder +-import SDWebImageAVIFCoder + import SDWebImageSVGCoder + + public final class ImageModule: Module { +@@ -193,7 +192,7 @@ public final class ImageModule: Module { + // This coder is much slower, but it's the only one that works in iOS 13 + SDImageCodersManager.shared.addCoder(SDImageWebPCoder.shared) + } +- SDImageCodersManager.shared.addCoder(SDImageAVIFCoder.shared) ++ + SDImageCodersManager.shared.addCoder(SDImageSVGCoder.shared) + SDImageCodersManager.shared.addCoder(SDImageHEICCoder.shared) + } diff --git a/patches/expo-modules-core+1.12.20.patch b/patches/expo-modules-core+1.12.20.patch new file mode 100644 index 00000000000..7df4a888334 --- /dev/null +++ b/patches/expo-modules-core+1.12.20.patch @@ -0,0 +1,10 @@ +diff --git a/node_modules/expo-modules-core/build/web/CoreModule.js b/node_modules/expo-modules-core/build/web/CoreModule.js +index 7a02851..b1b9561 100644 +--- a/node_modules/expo-modules-core/build/web/CoreModule.js ++++ b/node_modules/expo-modules-core/build/web/CoreModule.js +@@ -1,4 +1,4 @@ +-import uuid from '../uuid'; ++import * as uuid from 'uuid'; + class EventEmitter { + listeners; + addListener(eventName, listener) { diff --git a/patches/expo-video-thumbnails+8.0.0.patch b/patches/expo-video-thumbnails+8.0.0.patch new file mode 100644 index 00000000000..bfe3ce63022 --- /dev/null +++ b/patches/expo-video-thumbnails+8.0.0.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/expo-video-thumbnails/ios/VideoThumbnailsModule.swift b/node_modules/expo-video-thumbnails/ios/VideoThumbnailsModule.swift +index 2b01a1d..78c7ffa 100644 +--- a/node_modules/expo-video-thumbnails/ios/VideoThumbnailsModule.swift ++++ b/node_modules/expo-video-thumbnails/ios/VideoThumbnailsModule.swift +@@ -7,7 +7,7 @@ public class VideoThumbnailsModule: Module { + public func definition() -> ModuleDefinition { + Name("ExpoVideoThumbnails") + +- AsyncFunction("getThumbnail", getVideoThumbnail).runOnQueue(.main) ++ AsyncFunction("getThumbnail", getVideoThumbnail).runOnQueue(.global()) + } + + internal func getVideoThumbnail(sourceFilename: URL, options: VideoThumbnailsOptions) throws -> [String: Any] { diff --git a/patches/jest-expo+51.0.3.patch b/patches/jest-expo+51.0.3.patch new file mode 100644 index 00000000000..11af34f99cd --- /dev/null +++ b/patches/jest-expo+51.0.3.patch @@ -0,0 +1,15 @@ +diff --git a/node_modules/jest-expo/src/preset/setup.js b/node_modules/jest-expo/src/preset/setup.js +index 8567387..42ceb1f 100644 +--- a/node_modules/jest-expo/src/preset/setup.js ++++ b/node_modules/jest-expo/src/preset/setup.js +@@ -223,8 +223,8 @@ try { + const { NativeModulesProxy } = ExpoModulesCore; + + // Mock the `uuid` object with the implementation for web. +- ExpoModulesCore.uuid.v4 = uuid.default.v4; +- ExpoModulesCore.uuid.v5 = uuid.default.v5; ++ // ExpoModulesCore.uuid.v4 = uuid.default.v4; ++ // ExpoModulesCore.uuid.v5 = uuid.default.v5; + + // After the NativeModules mock is set up, we can mock NativeModuleProxy's functions that call + // into the native proxy module. We're not really interested in checking whether the underlying diff --git a/patches/react-native-button+3.1.0.patch b/patches/react-native-button+3.1.0.patch deleted file mode 100644 index c6d828ea0f6..00000000000 --- a/patches/react-native-button+3.1.0.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git a/node_modules/react-native-button/Button.js b/node_modules/react-native-button/Button.js -index 05fa1e6..dc9c781 100644 ---- a/node_modules/react-native-button/Button.js -+++ b/node_modules/react-native-button/Button.js -@@ -74,19 +74,19 @@ export default class Button extends Component { - } - - return ( -- -- -- -- {this._renderGroupedChildren()} -+ -+ -+ -+ {this._renderGroupedChildren()} -+ - -- -- -+ - ); - } - } diff --git a/patches/react-native-create-thumbnail+1.6.4.patch b/patches/react-native-create-thumbnail+1.6.4.patch deleted file mode 100644 index f5135e7e5e5..00000000000 --- a/patches/react-native-create-thumbnail+1.6.4.patch +++ /dev/null @@ -1,113 +0,0 @@ -diff --git a/node_modules/react-native-create-thumbnail/android/src/main/java/com/createthumbnail/CreateThumbnailModule.java b/node_modules/react-native-create-thumbnail/android/src/main/java/com/createthumbnail/CreateThumbnailModule.java -index 9bd67d8..bf4175a 100644 ---- a/node_modules/react-native-create-thumbnail/android/src/main/java/com/createthumbnail/CreateThumbnailModule.java -+++ b/node_modules/react-native-create-thumbnail/android/src/main/java/com/createthumbnail/CreateThumbnailModule.java -@@ -169,31 +169,35 @@ public class CreateThumbnailModule extends ReactContextBaseJavaModule { - } - - private static Bitmap getBitmapAtTime(Context context, String filePath, int time, Map headers) { -- MediaMetadataRetriever retriever = new MediaMetadataRetriever(); -- if (URLUtil.isFileUrl(filePath)) { -- String decodedPath; -- try { -- decodedPath = URLDecoder.decode(filePath, "UTF-8"); -- } catch (UnsupportedEncodingException e) { -- decodedPath = filePath; -- } -+ try { -+ MediaMetadataRetriever retriever = new MediaMetadataRetriever(); -+ if (URLUtil.isFileUrl(filePath)) { -+ String decodedPath; -+ try { -+ decodedPath = URLDecoder.decode(filePath, "UTF-8"); -+ } catch (UnsupportedEncodingException e) { -+ decodedPath = filePath; -+ } - -- retriever.setDataSource(decodedPath.replace("file://", "")); -- } else if (filePath.contains("content://")) { -- retriever.setDataSource(context, Uri.parse(filePath)); -- } else { -- if (VERSION.SDK_INT < 14) { -- throw new IllegalStateException("Remote videos aren't supported on sdk_version < 14"); -+ retriever.setDataSource(decodedPath.replace("file://", "")); -+ } else if (filePath.contains("content://")) { -+ retriever.setDataSource(context, Uri.parse(filePath)); -+ } else { -+ if (VERSION.SDK_INT < 14) { -+ throw new IllegalStateException("Remote videos aren't supported on sdk_version < 14"); -+ } -+ retriever.setDataSource(filePath, headers); - } -- retriever.setDataSource(filePath, headers); -- } - -- Bitmap image = retriever.getFrameAtTime(time * 1000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC); -- retriever.release(); -- if (image == null) { -+ Bitmap image = retriever.getFrameAtTime(time * 1000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC); -+ retriever.release(); -+ if (image == null) { -+ throw new IllegalStateException("File doesn't exist or not supported"); -+ } -+ return image; -+ } catch (Exception e) { - throw new IllegalStateException("File doesn't exist or not supported"); - } -- return image; - } - - private static long getDirSize(File dir) { -diff --git a/node_modules/react-native-create-thumbnail/ios/CreateThumbnail.h b/node_modules/react-native-create-thumbnail/ios/CreateThumbnail.h -index 28b1d9b..cb63c52 100644 ---- a/node_modules/react-native-create-thumbnail/ios/CreateThumbnail.h -+++ b/node_modules/react-native-create-thumbnail/ios/CreateThumbnail.h -@@ -3,5 +3,5 @@ - #import - - @interface CreateThumbnail : NSObject -- -++(void)create:(NSDictionary *)config findEventsWithResolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject; - @end -diff --git a/node_modules/react-native-create-thumbnail/ios/CreateThumbnail.m b/node_modules/react-native-create-thumbnail/ios/CreateThumbnail.m -index 92cc49f..a2bab15 100644 ---- a/node_modules/react-native-create-thumbnail/ios/CreateThumbnail.m -+++ b/node_modules/react-native-create-thumbnail/ios/CreateThumbnail.m -@@ -6,6 +6,10 @@ RCT_EXPORT_MODULE() - - RCT_EXPORT_METHOD(create:(NSDictionary *)config findEventsWithResolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) - { -+ [CreateThumbnail create:config findEventsWithResolver:resolve rejecter:reject]; -+} -+ -++(void) create:(NSDictionary *)config findEventsWithResolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject { - NSString *url = (NSString *)[config objectForKey:@"url"] ?: @""; - int timeStamp = [[config objectForKey:@"timeStamp"] intValue] ?: 0; - NSString *format = (NSString *)[config objectForKey:@"format"] ?: @"jpeg"; -@@ -82,7 +86,7 @@ RCT_EXPORT_METHOD(create:(NSDictionary *)config findEventsWithResolver:(RCTPromi - } - } - --- (unsigned long long) sizeOfFolderAtPath:(NSString *)path { -++ (unsigned long long) sizeOfFolderAtPath:(NSString *)path { - NSArray *files = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:path error:nil]; - NSEnumerator *enumerator = [files objectEnumerator]; - NSString *fileName; -@@ -93,7 +97,7 @@ RCT_EXPORT_METHOD(create:(NSDictionary *)config findEventsWithResolver:(RCTPromi - return size; - } - --- (void) cleanDir:(NSString *)path forSpace:(unsigned long long)size { -++ (void) cleanDir:(NSString *)path forSpace:(unsigned long long)size { - NSFileManager *fm = [NSFileManager defaultManager]; - NSError *error = nil; - unsigned long long deletedSize = 0; -@@ -110,7 +114,7 @@ RCT_EXPORT_METHOD(create:(NSDictionary *)config findEventsWithResolver:(RCTPromi - return; - } - --- (void) generateThumbImage:(AVURLAsset *)asset atTime:(int)timeStamp completion:(void (^)(UIImage* thumbnail))completion failure:(void (^)(NSError* error))failure { -++ (void) generateThumbImage:(AVURLAsset *)asset atTime:(int)timeStamp completion:(void (^)(UIImage* thumbnail))completion failure:(void (^)(NSError* error))failure { - AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; - generator.appliesPreferredTrackTransform = YES; - generator.maximumSize = CGSizeMake(512, 512); diff --git a/patches/react-native-device-info+10.13.1.patch b/patches/react-native-device-info+10.13.1.patch deleted file mode 100644 index 749f93f7122..00000000000 --- a/patches/react-native-device-info+10.13.1.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/resolver/DeviceTypeResolver.java b/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/resolver/DeviceTypeResolver.java -index a8e9b0c..2fac079 100644 ---- a/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/resolver/DeviceTypeResolver.java -+++ b/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/resolver/DeviceTypeResolver.java -@@ -80,10 +80,10 @@ public class DeviceTypeResolver { - double heightInches = metrics.heightPixels / (double) metrics.ydpi; - double diagonalSizeInches = Math.sqrt(Math.pow(widthInches, 2) + Math.pow(heightInches, 2)); - -- if (diagonalSizeInches >= 3.0 && diagonalSizeInches <= 6.9) { -+ if (diagonalSizeInches >= 3.0 && diagonalSizeInches <= 7.9) { - // Devices in a sane range for phones are considered to be Handsets. - return DeviceType.HANDSET; -- } else if (diagonalSizeInches > 6.9 && diagonalSizeInches <= 18.0) { -+ } else if (diagonalSizeInches > 7.9 && diagonalSizeInches <= 18.0) { - // Devices larger than handset and in a sane range for tablets are tablets. - return DeviceType.TABLET; - } else { diff --git a/patches/react-native-elements+3.4.3.patch b/patches/react-native-elements+3.4.3.patch deleted file mode 100644 index e156152b6e6..00000000000 --- a/patches/react-native-elements+3.4.3.patch +++ /dev/null @@ -1,93 +0,0 @@ -diff --git a/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js b/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js -index 1bfd2b4..a4f6f77 100644 ---- a/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js -+++ b/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js -@@ -10,7 +10,7 @@ var __rest = (this && this.__rest) || function (s, e) { - return t; - }; - import React, { Component } from 'react'; --import { StyleSheet, View, ActivityIndicator, Keyboard, } from 'react-native'; -+import { StyleSheet, View, ActivityIndicator, } from 'react-native'; - import { renderNode } from '../helpers'; - import Input from '../input/Input'; - import Icon from '../icons/Icon'; -@@ -68,24 +68,20 @@ class SearchBar extends Component { - }; - this.onBlur = (event) => { - this.props.onBlur(event); -- this.setState({ hasFocus: false }); -+ this.setState({ hasFocus: false, isEmpty: this.props.value === '' }); - }; - this.onChangeText = (text) => { - this.props.onChangeText(text); - this.setState({ isEmpty: text === '' }); - }; -- this._keyboardDidHide = () => { -- this.cancel(); -+ this.setNativeProps = (nativeProps: object) => { -+ this.input.setNativeProps && this.input.setNativeProps(nativeProps); - }; - const { value = '' } = props; - this.state = { - hasFocus: false, - isEmpty: value ? value === '' : true, - }; -- Keyboard.addListener('keyboardDidHide', this._keyboardDidHide); -- } -- componentWillUnmount() { -- Keyboard.removeListener('keyboardDidHide', this._keyboardDidHide); - } - render() { - var _a; -diff --git a/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js b/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js -index 8fe90be..69ab1ff 100644 ---- a/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js -+++ b/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js -@@ -78,6 +78,9 @@ class SearchBar extends Component { - this.props.onChangeText(text); - this.setState({ isEmpty: text === '' }); - }; -+ this.setNativeProps = (nativeProps: object) => { -+ this.input.setNativeProps && this.input.setNativeProps(nativeProps); -+ }; - const { value } = props; - this.state = { - hasFocus: false, -@@ -85,6 +88,11 @@ class SearchBar extends Component { - cancelButtonWidth: null, - }; - } -+ componentDidUpdate(prevProps) { -+ if (this.props.value !== prevProps.value) { -+ this.setState({isEmpty: this.props.value === ''}); -+ } -+ } - render() { - var _a, _b, _c, _d, _e, _f, _g; - const _h = this.props, { theme, cancelButtonProps, cancelButtonTitle, clearIcon, containerStyle, leftIconContainerStyle, rightIconContainerStyle, inputContainerStyle, inputStyle, placeholderTextColor, showLoading, loadingProps, searchIcon, showCancel } = _h, attributes = __rest(_h, ["theme", "cancelButtonProps", "cancelButtonTitle", "clearIcon", "containerStyle", "leftIconContainerStyle", "rightIconContainerStyle", "inputContainerStyle", "inputStyle", "placeholderTextColor", "showLoading", "loadingProps", "searchIcon", "showCancel"]); -diff --git a/node_modules/react-native-elements/dist/searchbar/SearchBar.d.ts b/node_modules/react-native-elements/dist/searchbar/SearchBar.d.ts -index 61844a8..a22a37c 100644 ---- a/node_modules/react-native-elements/dist/searchbar/SearchBar.d.ts -+++ b/node_modules/react-native-elements/dist/searchbar/SearchBar.d.ts -@@ -21,6 +21,7 @@ export declare type SearchBarBaseProps = React.ComponentPropsWithRef void; - }; - export declare type SearchBarProps = SearchBarBaseProps & SearchBarDefaultProps & SearchBarAndroidProps & SearchBarIosProps; - declare class SearchBar extends React.Component>> { -diff --git a/node_modules/react-native-elements/dist/searchbar/SearchBar.js b/node_modules/react-native-elements/dist/searchbar/SearchBar.js -index 43db650..6e8ebf5 100644 ---- a/node_modules/react-native-elements/dist/searchbar/SearchBar.js -+++ b/node_modules/react-native-elements/dist/searchbar/SearchBar.js -@@ -23,6 +23,9 @@ class SearchBar extends React.Component { - this.cancel = () => { - this.searchbar.cancel && this.searchbar.cancel(); - }; -+ this.setNativeProps = (nativeProps: object) => { -+ this.searchbar.setNativeProps && this.searchbar.setNativeProps(nativeProps); -+ }; - } - render() { - const Component = SEARCHBAR_COMPONENTS[this.props.platform] || DefaultSearchBar; diff --git a/patches/react-native-exception-handler+2.10.10.patch b/patches/react-native-exception-handler+2.10.10.patch new file mode 100644 index 00000000000..7112d31700b --- /dev/null +++ b/patches/react-native-exception-handler+2.10.10.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/react-native-exception-handler/android/src/main/AndroidManifest.xml b/node_modules/react-native-exception-handler/android/src/main/AndroidManifest.xml +index 58dfc7b..47c9954 100644 +--- a/node_modules/react-native-exception-handler/android/src/main/AndroidManifest.xml ++++ b/node_modules/react-native-exception-handler/android/src/main/AndroidManifest.xml +@@ -3,7 +3,7 @@ + package="com.masteratul.exceptionhandler"> + + +- ++ + + + diff --git a/patches/react-native-fast-image+8.6.3.patch b/patches/react-native-fast-image+8.6.3.patch deleted file mode 100644 index b3553b84ba4..00000000000 --- a/patches/react-native-fast-image+8.6.3.patch +++ /dev/null @@ -1,108 +0,0 @@ -diff --git a/node_modules/react-native-fast-image/RNFastImage.podspec b/node_modules/react-native-fast-image/RNFastImage.podspec -index db0fada..8469b1a 100644 ---- a/node_modules/react-native-fast-image/RNFastImage.podspec -+++ b/node_modules/react-native-fast-image/RNFastImage.podspec -@@ -16,6 +16,6 @@ Pod::Spec.new do |s| - s.source_files = "ios/**/*.{h,m}" - - s.dependency 'React-Core' -- s.dependency 'SDWebImage', '~> 5.11.1' -- s.dependency 'SDWebImageWebPCoder', '~> 0.8.4' -+ s.dependency 'SDWebImage', '~> 5.19.0' -+ s.dependency 'SDWebImageWebPCoder', '~> 0.14.5' - end -diff --git a/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageCookieJar.java b/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageCookieJar.java -new file mode 100644 -index 0000000..a302394 ---- /dev/null -+++ b/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageCookieJar.java -@@ -0,0 +1,45 @@ -+package com.dylanvann.fastimage; -+ -+import android.webkit.CookieManager; -+ -+import java.util.Collections; -+import java.util.LinkedList; -+import java.util.List; -+ -+import okhttp3.Cookie; -+import okhttp3.CookieJar; -+import okhttp3.HttpUrl; -+ -+public class FastImageCookieJar implements CookieJar { -+ private CookieManager cookieManager; -+ -+ private CookieManager getCookieManager() { -+ if (cookieManager == null) { -+ cookieManager = CookieManager.getInstance(); -+ } -+ -+ return cookieManager; -+ } -+ -+ @Override -+ public void saveFromResponse(HttpUrl url, List cookies) { -+ // Do nothing -+ } -+ -+ @Override -+ public List loadForRequest(HttpUrl url) { -+ String cookie = getCookieManager().getCookie(url.toString()); -+ -+ if (cookie == null || cookie.isEmpty()) { -+ return Collections.emptyList(); -+ } -+ -+ String[] pairs = cookie.split(";"); -+ List cookies = new LinkedList(); -+ for (String pair : pairs) { -+ cookies.add(Cookie.parse(url, pair)); -+ } -+ -+ return cookies; -+ } -+} -diff --git a/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageOkHttpProgressGlideModule.java b/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageOkHttpProgressGlideModule.java -index 811292a..79291fa 100644 ---- a/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageOkHttpProgressGlideModule.java -+++ b/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageOkHttpProgressGlideModule.java -@@ -43,6 +43,7 @@ public class FastImageOkHttpProgressGlideModule extends LibraryGlideModule { - OkHttpClient client = OkHttpClientProvider - .getOkHttpClient() - .newBuilder() -+ .cookieJar(new FastImageCookieJar()) - .addInterceptor(createInterceptor(progressListener)) - .build(); - OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(client); -diff --git a/node_modules/react-native-fast-image/dist/index.d.ts b/node_modules/react-native-fast-image/dist/index.d.ts -index 5abb7c9..b210637 100644 ---- a/node_modules/react-native-fast-image/dist/index.d.ts -+++ b/node_modules/react-native-fast-image/dist/index.d.ts -@@ -43,13 +43,13 @@ export interface ImageStyle extends FlexStyle, TransformsStyle, ShadowStyleIOS { - backfaceVisibility?: 'visible' | 'hidden'; - borderBottomLeftRadius?: number; - borderBottomRightRadius?: number; -- backgroundColor?: string; -- borderColor?: string; -+ backgroundColor?: ColorValue; -+ borderColor?: ColorValue; - borderWidth?: number; - borderRadius?: number; - borderTopLeftRadius?: number; - borderTopRightRadius?: number; -- overlayColor?: string; -+ overlayColor?: ColorValue; - opacity?: number; - } - export interface FastImageProps extends AccessibilityProps, ViewProps { -@@ -89,6 +89,10 @@ export interface FastImageProps extends AccessibilityProps, ViewProps { - * Render children within the image. - */ - children?: React.ReactNode; -+ /** -+ * Native ID to used with shared elements transition -+ */ -+ nativeID?: string; - } - export interface FastImageStaticProperties { - resizeMode: typeof resizeMode; diff --git a/patches/react-native-hw-keyboard-event+0.0.4.patch b/patches/react-native-hw-keyboard-event+0.0.4.patch deleted file mode 100644 index 7562e6a9820..00000000000 --- a/patches/react-native-hw-keyboard-event+0.0.4.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff --git a/node_modules/react-native-hw-keyboard-event/android/build.gradle b/node_modules/react-native-hw-keyboard-event/android/build.gradle -index a70aace..9c2c876 100644 ---- a/node_modules/react-native-hw-keyboard-event/android/build.gradle -+++ b/node_modules/react-native-hw-keyboard-event/android/build.gradle -@@ -1,11 +1,11 @@ - apply plugin: 'com.android.library' - - android { -- compileSdkVersion 28 -+ compileSdkVersion rootProject.hasProperty('compileSdkVersion') ? rootProject.compileSdkVersion : 28 - - defaultConfig { -- minSdkVersion 16 -- targetSdkVersion 28 -+ minSdkVersion rootProject.hasProperty('minSdkVersion') ? rootProject.minSdkVersion : 21 -+ targetSdkVersion rootProject.hasProperty('targetSdkVersion') ? rootProject.targetSdkVersion : 28 - versionCode 1 - versionName "1.0" - ndk { -diff --git a/node_modules/react-native-hw-keyboard-event/index.d.ts b/node_modules/react-native-hw-keyboard-event/index.d.ts -index 91999f1..116b725 100644 ---- a/node_modules/react-native-hw-keyboard-event/index.d.ts -+++ b/node_modules/react-native-hw-keyboard-event/index.d.ts -@@ -1,4 +1,5 @@ -+import {EventSubscription} from "react-native"; -+ - declare module "react-native-hw-keyboard-event"; - --export function onHWKeyPressed(hwKeyEvent: { pressedKey: string }): void; --export function removeOnHWKeyPressed(): void; -+export function onHWKeyPressed(callback: (hwKeyEvent: { pressedKey: string }) => void): EventSubscription; -diff --git a/node_modules/react-native-hw-keyboard-event/index.js b/node_modules/react-native-hw-keyboard-event/index.js -index 30d4dd9..3dcff70 100644 ---- a/node_modules/react-native-hw-keyboard-event/index.js -+++ b/node_modules/react-native-hw-keyboard-event/index.js -@@ -7,28 +7,9 @@ import { - - class HWKeyboardEvent { - onHWKeyPressed(cb) { -- this.removeOnHWKeyPressed(true); -- if (!this.cbStack) { -- this.cbStack = []; -- } -- this.cbStack.push(cb); - let keyEvent = new NativeEventEmitter(NativeModules.RNHWKeyboardEvent); -- this.listener = keyEvent.addListener("onHWKeyPressed", cb); -- } -- -- removeOnHWKeyPressed(newCbAdded) { -- if (this.listener) { -- this.listener.remove(); -- this.listener = null; -- } -- if (!this.cbStack) return; -- if (!newCbAdded) { -- this.cbStack.pop(); -- if (this.cbStack.length > 0) { -- // re-add removed listeners in case there where any -- this.onHWKeyPressed(this.cbStack[this.cbStack.length - 1]); -- } -- } -+ const listener = keyEvent.addListener("onHWKeyPressed", cb); -+ return listener; - } - } - diff --git a/patches/react-native-incall-manager+4.2.0.patch b/patches/react-native-incall-manager+4.2.0.patch new file mode 100644 index 00000000000..019642066a2 --- /dev/null +++ b/patches/react-native-incall-manager+4.2.0.patch @@ -0,0 +1,335 @@ +diff --git a/node_modules/react-native-incall-manager/android/src/main/java/com/zxcpoiu/incallmanager/InCallManagerModule.java b/node_modules/react-native-incall-manager/android/src/main/java/com/zxcpoiu/incallmanager/InCallManagerModule.java +index 10cb1e5..ba5d918 100644 +--- a/node_modules/react-native-incall-manager/android/src/main/java/com/zxcpoiu/incallmanager/InCallManagerModule.java ++++ b/node_modules/react-native-incall-manager/android/src/main/java/com/zxcpoiu/incallmanager/InCallManagerModule.java +@@ -1040,107 +1040,107 @@ public class InCallManagerModule extends ReactContextBaseJavaModule implements L + } + + @ReactMethod +- public void startRingtone(final String ringtoneUriType, final int seconds) { +- Thread thread = new Thread() { +- @Override +- public void run() { ++ public void startRingtone(final String ringtoneUriType, final int seconds, Promise promise) { ++ try { ++ Log.d(TAG, "startRingtone(): UriType=" + ringtoneUriType); ++ if (mRingtone != null) { ++ if (mRingtone.isPlaying()) { ++ Log.d(TAG, "startRingtone(): is already playing"); ++ promise.reject("ringtone is already playing", "no error"); ++ return; ++ } + try { +- Looper.prepare(); +- +- Log.d(TAG, "startRingtone(): UriType=" + ringtoneUriType); +- if (mRingtone != null) { +- if (mRingtone.isPlaying()) { +- Log.d(TAG, "startRingtone(): is already playing"); +- return; +- } else { +- stopRingtone(); // --- use brandnew instance +- } +- } ++ stopRingtone(); // ensure no ringtone is currently playing ++ } catch (Exception e) { ++ promise.reject("stopRingtone() failed", e); ++ return; ++ } ++ } + +- //if (!audioManager.isStreamMute(AudioManager.STREAM_RING)) { +- //if (origRingerMode == AudioManager.RINGER_MODE_NORMAL) { +- if (audioManager.getStreamVolume(AudioManager.STREAM_RING) == 0) { +- Log.d(TAG, "startRingtone(): ringer is silent. leave without play."); +- return; +- } ++ if (audioManager.getStreamVolume(AudioManager.STREAM_RING) == 0) { ++ Log.d(TAG, "startRingtone(): ringer is silent. leave without play."); ++ promise.reject("ringer is silent. leave without playing", "no error"); ++ return; ++ } + +- // --- there is no _DTMF_ option in startRingtone() +- Uri ringtoneUri = getRingtoneUri(ringtoneUriType); +- if (ringtoneUri == null) { +- Log.d(TAG, "startRingtone(): no available media"); +- return; +- } ++ // --- there is no _DTMF_ option in startRingtone() ++ Uri ringtoneUri = getRingtoneUri(ringtoneUriType); ++ if (ringtoneUri == null) { ++ Log.d(TAG, "startRingtone(): no available media"); ++ promise.reject("no available media", "no error"); ++ return; ++ } + +- if (audioManagerActivated) { +- InCallManagerModule.this.stop(); +- } ++ if (audioManagerActivated) { ++ InCallManagerModule.this.stop(); ++ } + +- wakeLockUtils.acquirePartialWakeLock(); ++ wakeLockUtils.acquirePartialWakeLock(); + +- storeOriginalAudioSetup(); +- Map data = new HashMap(); +- mRingtone = new myMediaPlayer(); ++ storeOriginalAudioSetup(); ++ Map data = new HashMap(); ++ mRingtone = new myMediaPlayer(); + +- data.put("name", "mRingtone"); +- data.put("sourceUri", ringtoneUri); +- data.put("setLooping", true); ++ data.put("name", "mRingtone"); ++ data.put("sourceUri", ringtoneUri); ++ data.put("setLooping", true); + +- //data.put("audioStream", AudioManager.STREAM_RING); // --- lagacy +- data.put("audioUsage", AudioAttributes.USAGE_NOTIFICATION_RINGTONE); // --- USAGE_NOTIFICATION_COMMUNICATION_REQUEST? +- data.put("audioContentType", AudioAttributes.CONTENT_TYPE_MUSIC); ++ //data.put("audioStream", AudioManager.STREAM_RING); // --- lagacy ++ data.put("audioUsage", AudioAttributes.USAGE_NOTIFICATION_RINGTONE); // --- USAGE_NOTIFICATION_COMMUNICATION_REQUEST? ++ data.put("audioContentType", AudioAttributes.CONTENT_TYPE_MUSIC); + +- setMediaPlayerEvents((MediaPlayer) mRingtone, "mRingtone"); ++ setMediaPlayerEvents((MediaPlayer) mRingtone, "mRingtone"); + +- mRingtone.startPlay(data); ++ mRingtone.startPlay(data); + +- if (seconds > 0) { +- mRingtoneCountDownHandler = new Handler(); +- mRingtoneCountDownHandler.postDelayed(new Runnable() { +- public void run() { +- try { +- Log.d(TAG, String.format("mRingtoneCountDownHandler.stopRingtone() timeout after %d seconds", seconds)); +- stopRingtone(); +- } catch(Exception e) { +- Log.d(TAG, "mRingtoneCountDownHandler.stopRingtone() failed."); +- } +- } +- }, seconds * 1000); ++ if (seconds > 0) { ++ mRingtoneCountDownHandler = new Handler(); ++ mRingtoneCountDownHandler.postDelayed(() -> { ++ try { ++ Log.d(TAG, String.format("mRingtoneCountDownHandler.stopRingtone() timeout after %d seconds", seconds)); ++ stopRingtone(); ++ } catch (Exception e) { ++ Log.d(TAG, "mRingtoneCountDownHandler.stopRingtone() failed."); + } +- +- Looper.loop(); +- } catch(Exception e) { +- wakeLockUtils.releasePartialWakeLock(); +- Log.e(TAG, "startRingtone() failed", e); +- } ++ }, seconds * 1000); + } +- }; ++ } catch (Exception e) { ++ wakeLockUtils.releasePartialWakeLock(); ++ Log.e(TAG, "startRingtone() failed", e); ++ promise.reject("startRingtone() failed", e); ++ } + +- thread.start(); ++ promise.resolve(null); + } + ++ + @ReactMethod +- public void stopRingtone() { +- Thread thread = new Thread() { +- @Override +- public void run() { +- try { +- if (mRingtone != null) { +- mRingtone.stopPlay(); +- mRingtone = null; +- restoreOriginalAudioSetup(); +- } +- if (mRingtoneCountDownHandler != null) { +- mRingtoneCountDownHandler.removeCallbacksAndMessages(null); +- mRingtoneCountDownHandler = null; +- } +- } catch (Exception e) { +- Log.d(TAG, "stopRingtone() failed"); +- } +- wakeLockUtils.releasePartialWakeLock(); +- } +- }; ++ public void stopRingtone(Promise promise) { ++ try { ++ stopRingtone(); ++ } catch (Exception e) { ++ promise.reject("stopRingtone() failed", e); ++ } ++ promise.resolve(null); ++ } + +- thread.start(); ++ private void stopRingtone() { ++ try { ++ if (mRingtone != null) { ++ mRingtone.stopPlay(); ++ mRingtone = null; ++ restoreOriginalAudioSetup(); ++ } ++ if (mRingtoneCountDownHandler != null) { ++ mRingtoneCountDownHandler.removeCallbacksAndMessages(null); ++ mRingtoneCountDownHandler = null; ++ } ++ } catch (Exception e) { ++ Log.d(TAG, "stopRingtone() failed"); ++ wakeLockUtils.releasePartialWakeLock(); ++ throw e; ++ } ++ wakeLockUtils.releasePartialWakeLock(); + } + + private void setMediaPlayerEvents(MediaPlayer mp, final String name) { +@@ -1267,6 +1267,32 @@ public class InCallManagerModule extends ReactContextBaseJavaModule implements L + return getAudioUri(type, fileBundle, fileBundleExt, fileSysWithExt, fileSysPath, "bundleBusytoneUri", "defaultBusytoneUri"); + } + ++ private Uri getRingtoneUriFromBundle(final String filename) { ++ if (audioUriMap.containsKey(filename)) { ++ Log.d(TAG, "getAudioUri() using: " + filename); ++ return audioUriMap.get(filename); ++ } ++ ++ int res = 0; ++ ReactContext reactContext = getReactApplicationContext(); ++ if (reactContext == null) { ++ Log.d(TAG, "getAudioUri() reactContext is null"); ++ } else { ++ res = reactContext.getResources().getIdentifier(filename, "raw", mPackageName); ++ } ++ ++ if (res <= 0) { ++ Log.d(TAG, String.format("getAudioUri() %s.%s not found in bundle.", filename, "mp3")); ++ audioUriMap.put(filename, null); ++ return null; ++ } ++ ++ Uri uri = Uri.parse("android.resource://" + mPackageName + "/" + Integer.toString(res)); ++ audioUriMap.put(filename, uri); ++ Log.d(TAG, "getAudioUri() using: " + filename); ++ return uri; ++ } ++ + private Uri getAudioUri(final String _type, final String fileBundle, final String fileBundleExt, final String fileSysWithExt, final String fileSysPath, final String uriBundle, final String uriDefault) { + String type = _type; + if (type.equals("_BUNDLE_")) { +@@ -1300,6 +1326,12 @@ public class InCallManagerModule extends ReactContextBaseJavaModule implements L + final String target = fileSysPath + "/" + type; + Uri _uri = getSysFileUri(target); + if (_uri == null) { ++ Log.d(TAG, "getAudioUri() file not found in system, trying bundle"); ++ _uri = getRingtoneUriFromBundle(type); ++ if (_uri != null) { ++ return _uri; ++ } ++ + Log.d(TAG, "getAudioUri() using user default"); + return getDefaultUserUri(uriDefault); + } else { +diff --git a/node_modules/react-native-incall-manager/index.d.ts b/node_modules/react-native-incall-manager/index.d.ts +index c8ebe9d..5f2ab9e 100644 +--- a/node_modules/react-native-incall-manager/index.d.ts ++++ b/node_modules/react-native-incall-manager/index.d.ts +@@ -37,9 +37,9 @@ declare class InCallManager { + vibrate_pattern: number | number[], + ios_category: string, + seconds: number +- ): void; ++ ): Promise; + +- stopRingtone(): void; ++ stopRingtone(): Promise; + + startProximitySensor(): void; + +diff --git a/node_modules/react-native-incall-manager/index.js b/node_modules/react-native-incall-manager/index.js +index ac5cafb..6887150 100644 +--- a/node_modules/react-native-incall-manager/index.js ++++ b/node_modules/react-native-incall-manager/index.js +@@ -73,14 +73,14 @@ class InCallManager { + _InCallManager.setMicrophoneMute(enable); + } + +- startRingtone(ringtone, vibrate_pattern, ios_category, seconds) { ++ async startRingtone(ringtone, vibrate_pattern, ios_category, seconds) { + ringtone = (typeof ringtone === 'string') ? ringtone : "_DEFAULT_"; + this.vibrate = (Array.isArray(vibrate_pattern)) ? true : false; + ios_category = (ios_category === 'playback') ? 'playback' : "default"; + seconds = (typeof seconds === 'number' && seconds > 0) ? parseInt(seconds) : -1; // --- android only, default looping + + if (Platform.OS === 'android') { +- _InCallManager.startRingtone(ringtone, seconds); ++ await _InCallManager.startRingtone(ringtone, seconds); + } else { + _InCallManager.startRingtone(ringtone, ios_category); + } +@@ -91,11 +91,11 @@ class InCallManager { + } + } + +- stopRingtone() { ++ async stopRingtone() { + if (this.vibrate) { + Vibration.cancel(); + } +- _InCallManager.stopRingtone(); ++ await _InCallManager.stopRingtone(); + } + + startProximitySensor() { +diff --git a/node_modules/react-native-incall-manager/ios/RNInCallManager/RNInCallManager.m b/node_modules/react-native-incall-manager/ios/RNInCallManager/RNInCallManager.m +index 7c54f6e..f861a0f 100644 +--- a/node_modules/react-native-incall-manager/ios/RNInCallManager/RNInCallManager.m ++++ b/node_modules/react-native-incall-manager/ios/RNInCallManager/RNInCallManager.m +@@ -1126,6 +1126,18 @@ - (NSURL *)getRingtoneUri:(NSString *)_type + return uri; + } + ++ ++- (NSURL *)getRingtoneUriFromBundle:(NSString *)filename ++{ ++ NSString *fileBundleExt = @"mp3"; ++ NSLog(@"RNInCallManager.getRingtoneUriFromBundle(): trying to get from bundle: %@.%@", filename, fileBundleExt); ++ NSURL *uriBundle = [[NSBundle mainBundle] URLForResource:filename withExtension:fileBundleExt]; ++ if (uriBundle == nil) { ++ NSLog(@"RNInCallManager.getRingtoneUriFromBundle(): not found in bundle: %@.%@", filename, fileBundleExt); ++ } ++ return uriBundle; ++} ++ + - (NSURL *)getAudioUri:(NSString *)_type + fileBundle:(NSString *)fileBundle + fileBundleExt:(NSString *)fileBundleExt +@@ -1149,11 +1161,15 @@ - (NSURL *)getAudioUri:(NSString *)_type + } + } + +- if (*uriDefault == nil) { +- NSString *target = [NSString stringWithFormat:@"%@/%@", fileSysPath, type]; +- *uriDefault = [self getSysFileUri:target]; ++ // --- Check file every time in case user deleted. ++ NSString *target = [NSString stringWithFormat:@"%@/%@", fileSysPath, type]; ++ NSURL *uri = [self getSysFileUri:target]; ++ ++ if (uri == nil) { ++ uri = [self getRingtoneUriFromBundle:type]; + } +- return *uriDefault; ++ ++ return uri; + } + + - (NSURL *)getSysFileUri:(NSString *)target diff --git a/patches/react-native-keyboard-tracking-view+5.7.0.patch b/patches/react-native-keyboard-tracking-view+5.7.0.patch deleted file mode 100644 index c0b9edcc38b..00000000000 --- a/patches/react-native-keyboard-tracking-view+5.7.0.patch +++ /dev/null @@ -1,494 +0,0 @@ -diff --git a/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m b/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m -index 1333a10..b908006 100644 ---- a/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m -+++ b/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m -@@ -23,7 +23,7 @@ - NSUInteger const kInputViewKey = 101010; - NSUInteger const kMaxDeferedInitializeAccessoryViews = 15; - NSInteger const kTrackingViewNotFoundErrorCode = 1; --NSInteger const kBottomViewHeight = 100; -+NSInteger const kBottomViewHeight = 34; - - typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - KeyboardTrackingScrollBehaviorNone, -@@ -40,6 +40,7 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - CGFloat _bottomViewHeight; - } - -+@property (nonatomic) NSMutableDictionary* rctScrollViewsArray; - @property (nonatomic, strong) UIScrollView *scrollViewToManage; - @property (nonatomic) BOOL scrollIsInverted; - @property (nonatomic) BOOL revealKeyboardInteractive; -@@ -53,6 +54,15 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - @property (nonatomic) BOOL scrollToFocusedInput; - @property (nonatomic) BOOL allowHitsOutsideBounds; - -+@property (nonatomic) BOOL normalList; -+@property (nonatomic) NSString* scrollViewNativeID; -+@property (nonatomic) CGFloat initialOffsetY; -+@property (nonatomic) NSInteger viewInitialOffsetY; -+@property (nonatomic) BOOL initialOffsetIsSet; -+@property (nonatomic) BOOL paused; -+@property (nonatomic, strong) UIView *accessoriesContainer; -+@property (nonatomic) NSString* accessoriesContainerID; -+ - @end - - @interface KeyboardTrackingView () -@@ -70,17 +80,24 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - [self addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:NULL]; - _inputViewsMap = [NSMapTable weakToWeakObjectsMapTable]; - _deferedInitializeAccessoryViewsCount = 0; -+ _rctScrollViewsArray = [[NSMutableDictionary alloc] init]; - - _observingInputAccessoryView = [ObservingInputAccessoryView new]; - _observingInputAccessoryView.delegate = self; - -+ _initialOffsetY = 0; -+ _initialOffsetIsSet = NO; -+ _viewInitialOffsetY = 0; -+ - _manageScrollView = YES; - _allowHitsOutsideBounds = NO; -+ _requiresSameParentToManageScrollView = YES; - - _bottomViewHeight = kBottomViewHeight; - - self.addBottomView = NO; - self.scrollToFocusedInput = NO; -+ self.paused = NO; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rctContentDidAppearNotification:) name:RCTContentDidAppearNotification object:nil]; - } -@@ -134,7 +151,7 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - UIView* subview; - for (UIView* view in webview.scrollView.subviews) - { -- if([[view.class description] hasPrefix:@"UIWeb"]) -+ if([[view.class description] hasPrefix:@"WKWeb"]) - { - subview = view; - } -@@ -149,7 +166,7 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - if(!_newClass) return; - - Method method = class_getInstanceMethod([UIResponder class], @selector(inputAccessoryView)); -- class_addMethod(_newClass, @selector(inputAccessoryView), imp_implementationWithBlock(^(id _self){return _observingInputAccessoryView;}), method_getTypeEncoding(method)); -+ class_addMethod(_newClass, @selector(inputAccessoryView), imp_implementationWithBlock(^(id _self){return self->_observingInputAccessoryView;}), method_getTypeEncoding(method)); - - objc_registerClassPair(_newClass); - } -@@ -167,33 +184,32 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - - (void)initializeAccessoryViewsAndHandleInsets - { - NSArray* allSubviews = [self getBreadthFirstSubviewsForView:[self getRootView]]; -- NSMutableArray* rctScrollViewsArray = [NSMutableArray array]; - - for (UIView* subview in allSubviews) - { -+ if(subview.nativeID) { -+ NSLog(@"self.accessoriesContainerID %@ %@", self.accessoriesContainerID, subview.nativeID); -+ } -+ -+ if (subview.nativeID && [subview.nativeID isEqualToString:self.accessoriesContainerID]) { -+ NSLog(@"SuperView ID: %@", subview.nativeID); -+ _accessoriesContainer = subview; -+ } -+ - if(_manageScrollView) - { - if(_scrollViewToManage == nil) - { -- if(_requiresSameParentToManageScrollView && [subview isKindOfClass:[RCTScrollView class]] && subview.superview == self.superview) -+ if([subview isKindOfClass:[RCTScrollView class]]) - { -- _scrollViewToManage = ((RCTScrollView*)subview).scrollView; -- } -- else if(!_requiresSameParentToManageScrollView && [subview isKindOfClass:[UIScrollView class]]) -- { -- _scrollViewToManage = (UIScrollView*)subview; -- } -+ RCTScrollView *scrollView = (RCTScrollView*)subview; - -- if(_scrollViewToManage != nil) -- { -- _scrollIsInverted = CGAffineTransformEqualToTransform(_scrollViewToManage.superview.transform, CGAffineTransformMakeScale(1, -1)); -+ if (subview.nativeID && [subview.nativeID isEqualToString:self.scrollViewNativeID]) { -+ [_rctScrollViewsArray setObject:scrollView forKey:subview.nativeID]; -+ _scrollViewToManage = scrollView.scrollView; -+ } - } - } -- -- if([subview isKindOfClass:[RCTScrollView class]]) -- { -- [rctScrollViewsArray addObject:(RCTScrollView*)subview]; -- } - } - - if ([subview isKindOfClass:NSClassFromString(@"RCTTextField")]) -@@ -242,7 +258,7 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - } - } - -- for (RCTScrollView *scrollView in rctScrollViewsArray) -+ for (RCTScrollView *scrollView in [_rctScrollViewsArray allValues]) - { - if(scrollView.scrollView == _scrollViewToManage) - { -@@ -267,6 +283,38 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - [self addBottomViewIfNecessary]; - } - -+- (void)resetScrollView:(NSString*) scrollViewNativeID { -+ for (RCTScrollView *scrollView in [_rctScrollViewsArray allValues]) -+ { -+ [scrollView removeScrollListener:self]; -+ } -+ [_rctScrollViewsArray removeAllObjects]; -+ _scrollViewToManage = nil; -+ _scrollViewNativeID = scrollViewNativeID; -+ -+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ -+ [self deferedInitializeAccessoryViewsAndHandleInsets]; -+ [self scrollToStart]; -+ }); -+} -+ -+-(void)pauseTracking:(NSString*) scrollViewNativeID { -+ if ([self.scrollViewNativeID isEqualToString:scrollViewNativeID]) { -+ _observingInputAccessoryView.delegate = nil; -+ self.scrollViewToManage = nil; -+ self.accessoriesContainer = nil; -+ self.paused = YES; -+ } -+} -+ -+-(void)resumeTracking:(NSString*) scrollViewNativeID { -+ if ([self.scrollViewNativeID isEqualToString:scrollViewNativeID]) { -+ self.paused = NO; -+ _observingInputAccessoryView.delegate = self; -+ [self deferedInitializeAccessoryViewsAndHandleInsets]; -+ } -+} -+ - - (void)setupTextView:(UITextView*)textView - { - if (textView != nil) -@@ -338,12 +386,19 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - - - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context - { -+ if (self.paused) { -+ return; -+ } - _observingInputAccessoryView.height = self.bounds.size.height; - } - - - (void)observingInputAccessoryViewKeyboardWillDisappear:(ObservingInputAccessoryView *)observingInputAccessoryView - { -- _bottomViewHeight = kBottomViewHeight; -+ if (self.paused) { -+ return; -+ } -+ -+ _bottomViewHeight = [self getBottomSafeArea]; - [self updateBottomViewFrame]; - } - -@@ -386,34 +441,44 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - - - (void)_updateScrollViewInsets - { -- if(self.scrollViewToManage != nil) -+ if(self.scrollViewToManage != nil && !self.paused) - { -+ if (!_initialOffsetIsSet) { -+ self.initialOffsetY = self.scrollViewToManage.contentOffset.y; -+ _initialOffsetIsSet = YES; -+ } -+ -+ if (_observingInputAccessoryView.keyboardState != KeyboardStateWillHide && _observingInputAccessoryView.keyboardState != KeyboardStateHidden) { -+ [self.scrollViewToManage setContentOffset:CGPointMake(self.scrollViewToManage.contentOffset.x, self.initialOffsetY) animated:NO]; -+ } -+ - UIEdgeInsets insets = self.scrollViewToManage.contentInset; - CGFloat bottomSafeArea = [self getBottomSafeArea]; - CGFloat bottomInset = MAX(self.bounds.size.height, _observingInputAccessoryView.keyboardHeight + _observingInputAccessoryView.height); - - CGFloat originalBottomInset = self.scrollIsInverted ? insets.top : insets.bottom; - CGPoint originalOffset = self.scrollViewToManage.contentOffset; -+ CGFloat keyboardHeight = _observingInputAccessoryView.keyboardHeight; - -- bottomInset += (_observingInputAccessoryView.keyboardHeight == 0 ? bottomSafeArea : 0); -+ bottomInset += (keyboardHeight == 0 ? bottomSafeArea : 0); - if(self.scrollIsInverted) - { - insets.top = bottomInset; - } - else - { -- insets.bottom = bottomInset; -+ insets.bottom = keyboardHeight; - } - self.scrollViewToManage.contentInset = insets; - - if(self.scrollBehavior == KeyboardTrackingScrollBehaviorScrollToBottomInvertedOnly && _scrollIsInverted) - { -- BOOL fisrtTime = _observingInputAccessoryView.keyboardHeight == 0 && _observingInputAccessoryView.keyboardState == KeyboardStateHidden; -+ BOOL firstTime = _observingInputAccessoryView.keyboardHeight == 0 && _observingInputAccessoryView.keyboardState == KeyboardStateHidden; - BOOL willOpen = _observingInputAccessoryView.keyboardHeight != 0 && _observingInputAccessoryView.keyboardState == KeyboardStateHidden; - BOOL isOpen = _observingInputAccessoryView.keyboardHeight != 0 && _observingInputAccessoryView.keyboardState == KeyboardStateShown; -- if(fisrtTime || willOpen || (isOpen && !self.isDraggingScrollView)) -+ if(firstTime || willOpen || (isOpen && !self.isDraggingScrollView)) - { -- [self.scrollViewToManage setContentOffset:CGPointMake(self.scrollViewToManage.contentOffset.x, -self.scrollViewToManage.contentInset.top) animated:!fisrtTime]; -+ [self.scrollViewToManage setContentOffset:CGPointMake(self.scrollViewToManage.contentOffset.x, self.scrollViewToManage.contentOffset.y) animated:!firstTime]; - } - } - else if(self.scrollBehavior == KeyboardTrackingScrollBehaviorFixedOffset && !self.isDraggingScrollView) -@@ -422,16 +487,21 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - self.scrollViewToManage.contentOffset = CGPointMake(originalOffset.x, originalOffset.y + insetsDiff); - } - -- insets = self.scrollViewToManage.contentInset; -- if(self.scrollIsInverted) -- { -- insets.top = bottomInset; -+ CGFloat kHeight = _observingInputAccessoryView.keyboardHeight; -+ if (kHeight != 0 && (_observingInputAccessoryView.keyboardState == KeyboardStateShown || _observingInputAccessoryView.keyboardState == KeyboardStateWillShow)) { -+ kHeight -= (bottomSafeArea + _viewInitialOffsetY); - } -- else -- { -- insets.bottom = bottomInset; -+ -+ CGFloat positionY = self.normalList ? 0 : kHeight; -+ CGRect frame = CGRectMake(self.scrollViewToManage.frame.origin.x, positionY, -+ self.scrollViewToManage.frame.size.width, self.scrollViewToManage.frame.size.height); -+ self.scrollViewToManage.frame = frame; -+ -+ if (self.accessoriesContainer) { -+ CGFloat containerPositionY = self.normalList ? 0 : kHeight; -+ self.accessoriesContainer.bounds = CGRectMake(self.accessoriesContainer.bounds.origin.x, containerPositionY, -+ self.accessoriesContainer.bounds.size.width, self.accessoriesContainer.bounds.size.height); - } -- self.scrollViewToManage.scrollIndicatorInsets = insets; - } - } - -@@ -448,7 +518,6 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - if (self.addBottomView && _bottomView == nil) - { - _bottomView = [UIView new]; -- _bottomView.backgroundColor = [UIColor whiteColor]; - [self addSubview:_bottomView]; - [self updateBottomViewFrame]; - } -@@ -467,6 +536,12 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - } - } - -+-(void)setBottomViewBackgroundColor:(UIColor*) color { -+ if (_bottomView != nil) { -+ _bottomView.backgroundColor = color; -+ } -+} -+ - #pragma mark - safe area - - -(void)safeAreaInsetsDidChange -@@ -495,7 +570,7 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - - (void) rctContentDidAppearNotification:(NSNotification*)notification - { - dispatch_async(dispatch_get_main_queue(), ^{ -- if(notification.object == [self getRootView] && _manageScrollView && _scrollViewToManage == nil) -+ if(notification.object == [self getRootView] && self->_manageScrollView && self->_scrollViewToManage == nil) - { - [self initializeAccessoryViewsAndHandleInsets]; - } -@@ -506,11 +581,15 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - - -(void)updateTransformAndInsets - { -+ if (self.paused) { -+ return; -+ } -+ - CGFloat bottomSafeArea = [self getBottomSafeArea]; -- CGFloat accessoryTranslation = MIN(-bottomSafeArea, -_observingInputAccessoryView.keyboardHeight); -+ CGFloat accessoryTranslation = MIN(-bottomSafeArea, -(_observingInputAccessoryView.keyboardHeight - _viewInitialOffsetY)); - - if (_observingInputAccessoryView.keyboardHeight <= bottomSafeArea) { -- _bottomViewHeight = kBottomViewHeight; -+ _bottomViewHeight = [self getBottomSafeArea]; - } else if (_observingInputAccessoryView.keyboardState != KeyboardStateWillHide) { - _bottomViewHeight = 0; - } -@@ -582,6 +661,8 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView - { - self.isDraggingScrollView = YES; -+ _initialOffsetIsSet = NO; -+ self.initialOffsetY = scrollView.contentOffset.y; - } - - - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset -@@ -592,6 +673,15 @@ typedef NS_ENUM(NSUInteger, KeyboardTrackingScrollBehavior) { - - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate - { - self.isDraggingScrollView = NO; -+ self.initialOffsetY = scrollView.contentOffset.y; -+} -+ -+- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { -+ self.initialOffsetY = scrollView.contentOffset.y; -+} -+ -+- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { -+ self.initialOffsetY = scrollView.contentOffset.y; - } - - - (CGFloat)getKeyboardHeight -@@ -634,6 +724,13 @@ RCT_REMAP_VIEW_PROPERTY(requiresSameParentToManageScrollView, requiresSameParent - RCT_REMAP_VIEW_PROPERTY(addBottomView, addBottomView, BOOL) - RCT_REMAP_VIEW_PROPERTY(scrollToFocusedInput, scrollToFocusedInput, BOOL) - RCT_REMAP_VIEW_PROPERTY(allowHitsOutsideBounds, allowHitsOutsideBounds, BOOL) -+RCT_REMAP_VIEW_PROPERTY(normalList, normalList, BOOL) -+RCT_REMAP_VIEW_PROPERTY(viewInitialOffsetY, viewInitialOffsetY, NSInteger) -+RCT_EXPORT_VIEW_PROPERTY(scrollViewNativeID, NSString) -+RCT_EXPORT_VIEW_PROPERTY(accessoriesContainerID, NSString) -+RCT_CUSTOM_VIEW_PROPERTY(backgroundColor, UIColor, KeyboardTrackingView) { -+ [view setBottomViewBackgroundColor:[RCTConvert UIColor:json]]; -+} - - + (BOOL)requiresMainQueueSetup - { -@@ -654,6 +751,48 @@ RCT_REMAP_VIEW_PROPERTY(allowHitsOutsideBounds, allowHitsOutsideBounds, BOOL) - return [[KeyboardTrackingView alloc] init]; - } - -+RCT_EXPORT_METHOD(resetScrollView:(nonnull NSNumber *)reactTag scrollViewNativeID:(NSString*)scrollViewNativeID) { -+ [self.bridge.uiManager addUIBlock: -+ ^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { -+ -+ KeyboardTrackingView *view = viewRegistry[reactTag]; -+ if (!view || ![view isKindOfClass:[KeyboardTrackingView class]]) { -+ RCTLogError(@"Error: cannot find KeyboardTrackingView with tag #%@", reactTag); -+ return; -+ } -+ -+ [view resetScrollView:scrollViewNativeID]; -+ }]; -+} -+ -+RCT_EXPORT_METHOD(pauseTracking:(nonnull NSNumber *)reactTag scrollViewNativeID:(NSString*)scrollViewNativeID) { -+ [self.bridge.uiManager addUIBlock: -+ ^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { -+ -+ KeyboardTrackingView *view = viewRegistry[reactTag]; -+ if (!view || ![view isKindOfClass:[KeyboardTrackingView class]]) { -+ RCTLogError(@"Error: cannot find KeyboardTrackingView with tag #%@", reactTag); -+ return; -+ } -+ -+ [view pauseTracking:scrollViewNativeID]; -+ }]; -+} -+ -+RCT_EXPORT_METHOD(resumeTracking:(nonnull NSNumber *)reactTag scrollViewNativeID:(NSString*)scrollViewNativeID) { -+ [self.bridge.uiManager addUIBlock: -+ ^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { -+ -+ KeyboardTrackingView *view = viewRegistry[reactTag]; -+ if (!view || ![view isKindOfClass:[KeyboardTrackingView class]]) { -+ RCTLogError(@"Error: cannot find KeyboardTrackingView with tag #%@", reactTag); -+ return; -+ } -+ -+ [view resumeTracking:scrollViewNativeID]; -+ }]; -+} -+ - RCT_EXPORT_METHOD(getNativeProps:(nonnull NSNumber *)reactTag resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) - { - [self.bridge.uiManager addUIBlock: -diff --git a/node_modules/react-native-keyboard-tracking-view/lib/ObservingInputAccessoryView.m b/node_modules/react-native-keyboard-tracking-view/lib/ObservingInputAccessoryView.m -index e472679..4a2204b 100644 ---- a/node_modules/react-native-keyboard-tracking-view/lib/ObservingInputAccessoryView.m -+++ b/node_modules/react-native-keyboard-tracking-view/lib/ObservingInputAccessoryView.m -@@ -115,21 +115,25 @@ - - - (void)_keyboardWillShowNotification:(NSNotification*)notification - { -- _keyboardState = KeyboardStateWillShow; -+ if (_keyboardState != KeyboardStateShown) { -+ _keyboardState = KeyboardStateWillShow; - -- [self invalidateIntrinsicContentSize]; -+ [self invalidateIntrinsicContentSize]; - -- if([_delegate respondsToSelector:@selector(observingInputAccessoryViewKeyboardWillAppear:keyboardDelta:)]) -- { -- [_delegate observingInputAccessoryViewKeyboardWillAppear:self keyboardDelta:_keyboardHeight - _previousKeyboardHeight]; -+ if([_delegate respondsToSelector:@selector(observingInputAccessoryViewKeyboardWillAppear:keyboardDelta:)]) -+ { -+ [_delegate observingInputAccessoryViewKeyboardWillAppear:self keyboardDelta:_keyboardHeight - _previousKeyboardHeight]; -+ } - } - } - - - (void)_keyboardDidShowNotification:(NSNotification*)notification - { -- _keyboardState = KeyboardStateShown; -+ if (_keyboardState != KeyboardStateShown) { -+ _keyboardState = KeyboardStateShown; - -- [self invalidateIntrinsicContentSize]; -+ [self invalidateIntrinsicContentSize]; -+ } - } - - - (void)_keyboardWillHideNotification:(NSNotification*)notification -diff --git a/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.android.js b/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.android.js -index af15edf..20b6ab6 100644 ---- a/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.android.js -+++ b/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.android.js -@@ -13,5 +13,8 @@ export default class KeyboardTrackingView extends PureComponent { - async getNativeProps() { - return {trackingViewHeight: 0, keyboardHeight: 0, contentTopInset: 0}; - } -+ resetScrollView() {} -+ pauseTracking() {} -+ resumeTracking() {} - scrollToStart() {} - } -diff --git a/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.ios.js b/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.ios.js -index 5e2c207..07c8257 100644 ---- a/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.ios.js -+++ b/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.ios.js -@@ -25,6 +25,24 @@ export default class KeyboardTrackingView extends PureComponent { - return {}; - } - -+ resetScrollView(scrollViewNativeID) { -+ if (this.ref && KeyboardTrackingViewManager && KeyboardTrackingViewManager.resetScrollView) { -+ KeyboardTrackingViewManager.resetScrollView(ReactNative.findNodeHandle(this.ref), scrollViewNativeID); -+ } -+ } -+ -+ pauseTracking(scrollViewNativeID) { -+ if (this.ref && KeyboardTrackingViewManager && KeyboardTrackingViewManager.pauseTracking) { -+ KeyboardTrackingViewManager.pauseTracking(ReactNative.findNodeHandle(this.ref), scrollViewNativeID); -+ } -+ } -+ -+ resumeTracking(scrollViewNativeID) { -+ if (this.ref && KeyboardTrackingViewManager && KeyboardTrackingViewManager.resumeTracking) { -+ KeyboardTrackingViewManager.resumeTracking(ReactNative.findNodeHandle(this.ref), scrollViewNativeID); -+ } -+ } -+ - scrollToStart() { - if (this.ref && KeyboardTrackingViewManager && KeyboardTrackingViewManager.scrollToStart) { - KeyboardTrackingViewManager.scrollToStart(ReactNative.findNodeHandle(this.ref)); diff --git a/patches/react-native-navigation+7.39.1.patch b/patches/react-native-navigation+7.40.1.patch similarity index 50% rename from patches/react-native-navigation+7.39.1.patch rename to patches/react-native-navigation+7.40.1.patch index 84d703ce387..9d32075b3cf 100644 --- a/patches/react-native-navigation+7.39.1.patch +++ b/patches/react-native-navigation+7.40.1.patch @@ -74,10 +74,25 @@ index 481aaf0..609e359 100644 mPermissionListener = listener; requestPermissions(permissions, requestCode); diff --git a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java -index 4cc09eb..2c46d59 100644 +index 4cc09eb..857bbd4 100644 --- a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java +++ b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java -@@ -66,15 +66,22 @@ public class NavigationModule extends ReactContextBaseJavaModule { +@@ -31,6 +31,7 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController; + + import java.util.ArrayList; + import java.util.Objects; ++import java.util.Optional; + + import static com.reactnativenavigation.utils.UiUtils.pxToDp; + +@@ -60,21 +61,28 @@ public class NavigationModule extends ReactContextBaseJavaModule { + public void onHostPause() { + super.onHostPause(); + UiUtils.runOnMainThread(() -> { +- if (activity() != null) navigator().onHostPause(); ++ if (activity() != null) navigator().ifPresent(Navigator::onHostPause); + }); + } @Override public void onHostResume() { @@ -92,16 +107,16 @@ index 4cc09eb..2c46d59 100644 - UiUtils.runOnMainThread(() -> navigator().onHostResume()); + try { + eventEmitter = new EventEmitter(reactContext); -+ Navigator navigator = navigator(); -+ if (navigator != null) { -+ navigator().setEventEmitter(eventEmitter); ++ if (navigator().isPresent()) { ++ Navigator navigator = navigator().get(); ++ navigator.setEventEmitter(eventEmitter); + layoutFactory.init( + activity(), + eventEmitter, -+ navigator().getChildRegistry(), ++ navigator.getChildRegistry(), + ((NavigationApplication) activity().getApplication()).getExternalComponents() + ); -+ UiUtils.runOnMainThread(() -> navigator().onHostResume()); ++ UiUtils.runOnMainThread(navigator::onHostResume); + } + } catch (ClassCastException e) { + // The most current activity is not a NavigationActivity @@ -109,19 +124,126 @@ index 4cc09eb..2c46d59 100644 } }); } -@@ -212,7 +219,10 @@ public class NavigationModule extends ReactContextBaseJavaModule { +@@ -116,7 +124,7 @@ public class NavigationModule extends ReactContextBaseJavaModule { + final LayoutNode layoutTree = LayoutNodeParser.parse(Objects.requireNonNull(jsonParser.parse(rawLayoutTree).optJSONObject("root"))); + handle(() -> { + final ViewController viewController = layoutFactory.create(layoutTree); +- navigator().setRoot(viewController, new NativeCommandListener("setRoot", commandId, promise, eventEmitter, now), reactInstanceManager); ++ navigator().ifPresent(nav -> nav.setRoot(viewController, new NativeCommandListener("setRoot", commandId, promise, eventEmitter, now), reactInstanceManager)); + }); + } + +@@ -125,13 +133,13 @@ public class NavigationModule extends ReactContextBaseJavaModule { + handle(() -> { + Options defaultOptions = parse(options); + layoutFactory.setDefaultOptions(defaultOptions); +- navigator().setDefaultOptions(defaultOptions); ++ navigator().ifPresent(nav -> nav.setDefaultOptions(defaultOptions)); + }); + } + + @ReactMethod + public void mergeOptions(String onComponentId, @Nullable ReadableMap options) { +- handle(() -> navigator().mergeOptions(onComponentId, parse(options))); ++ handle(() -> navigator().ifPresent(nav -> nav.mergeOptions(onComponentId, parse(options)))); + } + + @ReactMethod +@@ -139,7 +147,7 @@ public class NavigationModule extends ReactContextBaseJavaModule { + final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree)); + handle(() -> { + final ViewController viewController = layoutFactory.create(layoutTree); +- navigator().push(onComponentId, viewController, new NativeCommandListener("push", commandId, promise, eventEmitter, now)); ++ navigator().ifPresent(nav -> nav.push(onComponentId, viewController, new NativeCommandListener("push", commandId, promise, eventEmitter, now))); + }); + } + +@@ -151,23 +159,23 @@ public class NavigationModule extends ReactContextBaseJavaModule { + final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(children.getMap(i))); + _children.add(layoutFactory.create(layoutTree)); + } +- navigator().setStackRoot(onComponentId, _children, new NativeCommandListener("setStackRoot", commandId, promise, eventEmitter, now)); ++ navigator().ifPresent(nav -> nav.setStackRoot(onComponentId, _children, new NativeCommandListener("setStackRoot", commandId, promise, eventEmitter, now))); + }); + } + + @ReactMethod + public void pop(String commandId, String componentId, @Nullable ReadableMap mergeOptions, Promise promise) { +- handle(() -> navigator().pop(componentId, parse(mergeOptions), new NativeCommandListener("pop", commandId, promise, eventEmitter, now))); ++ handle(() -> navigator().ifPresent(nav -> nav.pop(componentId, parse(mergeOptions), new NativeCommandListener("pop", commandId, promise, eventEmitter, now)))); + } + + @ReactMethod + public void popTo(String commandId, String componentId, @Nullable ReadableMap mergeOptions, Promise promise) { +- handle(() -> navigator().popTo(componentId, parse(mergeOptions), new NativeCommandListener("popTo", commandId, promise, eventEmitter, now))); ++ handle(() -> navigator().ifPresent(nav -> nav.popTo(componentId, parse(mergeOptions), new NativeCommandListener("popTo", commandId, promise, eventEmitter, now)))); + } + + @ReactMethod + public void popToRoot(String commandId, String componentId, @Nullable ReadableMap mergeOptions, Promise promise) { +- handle(() -> navigator().popToRoot(componentId, parse(mergeOptions), new NativeCommandListener("popToRoot", commandId, promise, eventEmitter, now))); ++ handle(() -> navigator().ifPresent(nav -> nav.popToRoot(componentId, parse(mergeOptions), new NativeCommandListener("popToRoot", commandId, promise, eventEmitter, now)))); } - private Navigator navigator() { + @ReactMethod +@@ -175,21 +183,21 @@ public class NavigationModule extends ReactContextBaseJavaModule { + final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree)); + handle(() -> { + final ViewController viewController = layoutFactory.create(layoutTree); +- navigator().showModal(viewController, new NativeCommandListener("showModal", commandId, promise, eventEmitter, now)); ++ navigator().ifPresent(nav -> nav.showModal(viewController, new NativeCommandListener("showModal", commandId, promise, eventEmitter, now))); + }); + } + + @ReactMethod + public void dismissModal(String commandId, String componentId, @Nullable ReadableMap mergeOptions, Promise promise) { + handle(() -> { +- navigator().mergeOptions(componentId, parse(mergeOptions)); +- navigator().dismissModal(componentId, new NativeCommandListener("dismissModal", commandId, promise, eventEmitter, now)); ++ navigator().ifPresent(nav -> nav.mergeOptions(componentId, parse(mergeOptions))); ++ navigator().ifPresent(nav -> nav.dismissModal(componentId, new NativeCommandListener("dismissModal", commandId, promise, eventEmitter, now))); + }); + } + + @ReactMethod + public void dismissAllModals(String commandId, @Nullable ReadableMap mergeOptions, Promise promise) { +- handle(() -> navigator().dismissAllModals(parse(mergeOptions), new NativeCommandListener("dismissAllModals", commandId, promise, eventEmitter, now))); ++ handle(() -> navigator().ifPresent(nav -> nav.dismissAllModals(parse(mergeOptions), new NativeCommandListener("dismissAllModals", commandId, promise, eventEmitter, now)))); + } + + @ReactMethod +@@ -197,22 +205,25 @@ public class NavigationModule extends ReactContextBaseJavaModule { + final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree)); + handle(() -> { + final ViewController viewController = layoutFactory.create(layoutTree); +- navigator().showOverlay(viewController, new NativeCommandListener("showOverlay", commandId, promise, eventEmitter, now)); ++ navigator().ifPresent(nav -> nav.showOverlay(viewController, new NativeCommandListener("showOverlay", commandId, promise, eventEmitter, now))); + }); + } + + @ReactMethod + public void dismissOverlay(String commandId, String componentId, Promise promise) { +- handle(() -> navigator().dismissOverlay(componentId, new NativeCommandListener("dismissOverlay", commandId, promise, eventEmitter, now))); ++ handle(() -> navigator().ifPresent(nav -> nav.dismissOverlay(componentId, new NativeCommandListener("dismissOverlay", commandId, promise, eventEmitter, now)))); + } + + @ReactMethod + public void dismissAllOverlays(String commandId, Promise promise) { +- handle(() -> navigator().dismissAllOverlays(new NativeCommandListener("dismissAllOverlays", commandId, promise, eventEmitter, now))); ++ handle(() -> navigator().ifPresent(nav -> nav.dismissAllOverlays(new NativeCommandListener("dismissAllOverlays", commandId, promise, eventEmitter, now)))); + } + +- private Navigator navigator() { - return activity().getNavigator(); ++ private Optional navigator() { + if (activity() instanceof NavigationActivity) { -+ return ((NavigationActivity)activity()).getNavigator(); ++ return Optional.ofNullable(((NavigationActivity)activity()).getNavigator()); + } -+ return null; ++ return Optional.empty(); } private Options parse(@Nullable ReadableMap mergeOptions) { -@@ -223,19 +233,23 @@ public class NavigationModule extends ReactContextBaseJavaModule { +@@ -223,22 +234,26 @@ public class NavigationModule extends ReactContextBaseJavaModule { protected void handle(Runnable task) { UiThread.post(() -> { @@ -144,12 +266,36 @@ index 4cc09eb..2c46d59 100644 } @Override - public void onCatalystInstanceDestroy() { +- public void onCatalystInstanceDestroy() { - final NavigationActivity navigationActivity = activity(); ++ public void invalidate() { + final NavigationActivity navigationActivity = (NavigationActivity)activity(); if (navigationActivity != null) { navigationActivity.onCatalystInstanceDestroy(); } +- super.onCatalystInstanceDestroy(); ++ super.invalidate(); + } + } +diff --git a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReactTypefaceUtils.java b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReactTypefaceUtils.java +index 834d734..3fc00c3 100644 +--- a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReactTypefaceUtils.java ++++ b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReactTypefaceUtils.java +@@ -96,12 +96,12 @@ public class ReactTypefaceUtils { + + int want = 0; + if ((weight == Typeface.BOLD) +- || ((oldStyle & Typeface.BOLD) != 0 && weight == ReactTextShadowNode.UNSET)) { ++ || ((oldStyle & Typeface.BOLD) != 0 && weight == -1)) { + want |= Typeface.BOLD; + } + + if ((style == Typeface.ITALIC) +- || ((oldStyle & Typeface.ITALIC) != 0 && style == ReactTextShadowNode.UNSET)) { ++ || ((oldStyle & Typeface.ITALIC) != 0 && style == -1)) { + want |= Typeface.ITALIC; + } + diff --git a/node_modules/react-native-navigation/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/ReactGateway.java b/node_modules/react-native-navigation/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/ReactGateway.java index 035ec31..630b8d4 100644 --- a/node_modules/react-native-navigation/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/ReactGateway.java diff --git a/patches/react-native-notifications+5.1.0.patch b/patches/react-native-notifications+5.1.0.patch index dcb96e7695c..c3da042676f 100644 --- a/patches/react-native-notifications+5.1.0.patch +++ b/patches/react-native-notifications+5.1.0.patch @@ -16,10 +16,10 @@ index 30bb01c..bba788d 100644 events "PASSED", "SKIPPED", "FAILED", "standardOut", "standardError" } diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml b/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml -index 24cd226..4bfacba 100644 +index 24cd226..3aa1728 100644 --- a/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml +++ b/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml -@@ -3,6 +3,7 @@ +@@ -3,19 +3,19 @@ xmlns:android="http://schemas.android.com/apk/res/android" package="com.wix.reactnativenotifications"> @@ -27,7 +27,22 @@ index 24cd226..4bfacba 100644 +- ++ + + ++ android:exported="false"> + + +- + + + +@@ -23,6 +23,9 @@ android:name=".fcm.FcmInstanceIdRefreshHandlerService" android:exported="false" android:permission="android.permission.BIND_JOB_SERVICE" /> diff --git a/patches/react-native-safe-area-context+4.9.0.patch b/patches/react-native-safe-area-context+4.10.8.patch similarity index 100% rename from patches/react-native-safe-area-context+4.9.0.patch rename to patches/react-native-safe-area-context+4.10.8.patch diff --git a/patches/react-native-svg+15.1.0.patch b/patches/react-native-svg+15.4.0.patch similarity index 100% rename from patches/react-native-svg+15.1.0.patch rename to patches/react-native-svg+15.4.0.patch diff --git a/patches/react-native-video+5.2.1.patch b/patches/react-native-video+5.2.1.patch deleted file mode 100644 index 241775ce812..00000000000 --- a/patches/react-native-video+5.2.1.patch +++ /dev/null @@ -1,199 +0,0 @@ -diff --git a/node_modules/react-native-video/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/node_modules/react-native-video/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java -index fe95fdf..c95448a 100644 ---- a/node_modules/react-native-video/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java -+++ b/node_modules/react-native-video/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java -@@ -3,6 +3,7 @@ package com.brentvatne.exoplayer; - import android.annotation.SuppressLint; - import android.app.Activity; - import android.content.Context; -+import android.graphics.Color; - import android.media.AudioManager; - import android.net.Uri; - import android.os.Handler; -@@ -14,6 +15,7 @@ import android.view.Window; - import android.view.accessibility.CaptioningManager; - import android.widget.FrameLayout; - import android.widget.ImageButton; -+import android.widget.ImageView; - - import com.brentvatne.react.R; - import com.brentvatne.receiver.AudioBecomingNoisyReceiver; -@@ -317,6 +319,7 @@ class ReactExoplayerView extends FrameLayout implements - playerControlView.setPlayer(player); - playerControlView.show(); - playPauseControlContainer = playerControlView.findViewById(R.id.exo_play_pause_container); -+ playerControlView.findViewById(R.id.exo_fullscreen_button).setOnClickListener(v -> setFullscreen(!isFullscreen)); - - // Invoking onClick event for exoplayerView - exoPlayerView.setOnClickListener(new OnClickListener() { -@@ -327,7 +330,7 @@ class ReactExoplayerView extends FrameLayout implements - }); - - //Handling the playButton click event -- ImageButton playButton = playerControlView.findViewById(R.id.exo_play); -+ ImageButton playButton = playerControlView.findViewById(com.google.android.exoplayer2.R.id.exo_play); - playButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { -@@ -339,7 +342,7 @@ class ReactExoplayerView extends FrameLayout implements - }); - - //Handling the pauseButton click event -- ImageButton pauseButton = playerControlView.findViewById(R.id.exo_pause); -+ ImageButton pauseButton = playerControlView.findViewById(com.google.android.exoplayer2.R.id.exo_pause); - pauseButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { -@@ -736,6 +739,7 @@ class ReactExoplayerView extends FrameLayout implements - @Override - public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { - String text = "onStateChanged: playWhenReady=" + playWhenReady + ", playbackState="; -+ eventEmitter.playbackRateChange(playWhenReady && playbackState == com.google.android.exoplayer2.ExoPlayer.STATE_READY ? 1.0f : 0.0f); - switch (playbackState) { - case Player.STATE_IDLE: - text += "idle"; -@@ -1305,6 +1309,7 @@ class ReactExoplayerView extends FrameLayout implements - Window window = activity.getWindow(); - View decorView = window.getDecorView(); - int uiOptions; -+ ImageView fullscreenButton = playerControlView.findViewById(R.id.exo_fullscreen_icon); - if (isFullscreen) { - if (Util.SDK_INT >= 19) { // 4.4+ - uiOptions = SYSTEM_UI_FLAG_HIDE_NAVIGATION -@@ -1316,11 +1321,14 @@ class ReactExoplayerView extends FrameLayout implements - } - eventEmitter.fullscreenWillPresent(); - decorView.setSystemUiVisibility(uiOptions); -+ decorView.setBackgroundColor(Color.parseColor("#000000")); -+ fullscreenButton.setImageResource(com.google.android.exoplayer2.R.drawable.exo_controls_fullscreen_exit); - eventEmitter.fullscreenDidPresent(); - } else { - uiOptions = View.SYSTEM_UI_FLAG_VISIBLE; - eventEmitter.fullscreenWillDismiss(); - decorView.setSystemUiVisibility(uiOptions); -+ fullscreenButton.setImageResource(com.google.android.exoplayer2.R.drawable.exo_controls_fullscreen_enter); - eventEmitter.fullscreenDidDismiss(); - } - } -diff --git a/node_modules/react-native-video/android-exoplayer/src/main/res/layout/exo_player_control_view.xml b/node_modules/react-native-video/android-exoplayer/src/main/res/layout/exo_player_control_view.xml -index becee6a..5d4b2cd 100644 ---- a/node_modules/react-native-video/android-exoplayer/src/main/res/layout/exo_player_control_view.xml -+++ b/node_modules/react-native-video/android-exoplayer/src/main/res/layout/exo_player_control_view.xml -@@ -1,5 +1,6 @@ - - -+ -+ -+ -+ -+ - - - -diff --git a/node_modules/react-native-video/ios/Video/RCTVideo.m b/node_modules/react-native-video/ios/Video/RCTVideo.m -index a757c08..da428cd 100644 ---- a/node_modules/react-native-video/ios/Video/RCTVideo.m -+++ b/node_modules/react-native-video/ios/Video/RCTVideo.m -@@ -449,6 +449,7 @@ static int const RCTVideoUnset = -1; - _allowsExternalPlayback = NO; - - // sideload text tracks -+ NSLock *mixCompositionLock = [[NSLock alloc] init]; // mixComposition is not thread-safe; lock in the async blocks below - AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init]; - - AVAssetTrack *videoAsset = [asset tracksWithMediaType:AVMediaTypeVideo].firstObject; -@@ -466,30 +467,58 @@ static int const RCTVideoUnset = -1; - error:nil]; - - NSMutableArray* validTextTracks = [NSMutableArray array]; -+ NSLock *validTextTracksLock = [[NSLock alloc] init]; // validTextTracks is not thread-safe -+ dispatch_group_t textTracksDispatchGroup = dispatch_group_create(); -+ - for (int i = 0; i < _textTracks.count; ++i) { - AVURLAsset *textURLAsset; -- NSString *textUri = [_textTracks objectAtIndex:i][@"uri"]; -+ NSDictionary *curTrack = _textTracks[i]; // capture the current track, because we're going to set _textTracks in an async block below -+ NSString *textUri = curTrack[@"uri"]; -+ - if ([[textUri lowercaseString] hasPrefix:@"http"]) { - textURLAsset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:textUri] options:assetOptions]; - } else { - textURLAsset = [AVURLAsset URLAssetWithURL:[self urlFilePath:textUri] options:nil]; - } -- AVAssetTrack *textTrackAsset = [textURLAsset tracksWithMediaType:AVMediaTypeText].firstObject; -- if (!textTrackAsset) continue; // fix when there's no textTrackAsset -- [validTextTracks addObject:[_textTracks objectAtIndex:i]]; -- AVMutableCompositionTrack *textCompTrack = [mixComposition -- addMutableTrackWithMediaType:AVMediaTypeText -- preferredTrackID:kCMPersistentTrackID_Invalid]; -- [textCompTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.timeRange.duration) -- ofTrack:textTrackAsset -- atTime:kCMTimeZero -- error:nil]; -- } -- if (validTextTracks.count != _textTracks.count) { -- [self setTextTracks:validTextTracks]; -- } -- -- handler([AVPlayerItem playerItemWithAsset:mixComposition]); -+ -+ dispatch_group_enter(textTracksDispatchGroup); // completionHandler runs async -+ -+ [textURLAsset loadTracksWithMediaType:AVMediaTypeText completionHandler:^(NSArray * trackArr, NSError * error) { -+ if (error) { -+ RCTLogError(@"Error from loadTracksWithMediaType: %@", error); -+ dispatch_group_leave(textTracksDispatchGroup); -+ return; -+ } -+ -+ AVAssetTrack *textTrackAsset = trackArr.firstObject; -+ -+ if (!textTrackAsset) return; -+ -+ [validTextTracksLock lock]; // validTextTracks is not thread-safe -+ [validTextTracks addObject:curTrack]; -+ [validTextTracksLock unlock]; -+ -+ [mixCompositionLock lock]; // mixComposition is not thread-safe -+ AVMutableCompositionTrack *textCompTrack = [mixComposition -+ addMutableTrackWithMediaType:AVMediaTypeText -+ preferredTrackID:kCMPersistentTrackID_Invalid]; -+ [textCompTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.timeRange.duration) -+ ofTrack:textTrackAsset -+ atTime:kCMTimeZero -+ error:nil]; -+ [mixCompositionLock unlock]; -+ -+ dispatch_group_leave(textTracksDispatchGroup); -+ }]; -+ } -+ -+ dispatch_group_notify(textTracksDispatchGroup, dispatch_get_main_queue(), ^{ -+ if (validTextTracks.count > 0) { -+ [self setTextTracks:validTextTracks]; -+ } -+ -+ handler([AVPlayerItem playerItemWithAsset:mixComposition]); -+ }); - } - - - (void)playerItemForSource:(NSDictionary *)source withCallback:(void(^)(AVPlayerItem *))handler diff --git a/patches/react-native-video+6.4.3.patch b/patches/react-native-video+6.4.3.patch new file mode 100644 index 00000000000..bc20776a6c0 --- /dev/null +++ b/patches/react-native-video+6.4.3.patch @@ -0,0 +1,17 @@ +diff --git a/node_modules/react-native-video/ios/Video/Features/RCTVideoUtils.swift b/node_modules/react-native-video/ios/Video/Features/RCTVideoUtils.swift +index c13c4d9..b86a860 100644 +--- a/node_modules/react-native-video/ios/Video/Features/RCTVideoUtils.swift ++++ b/node_modules/react-native-video/ios/Video/Features/RCTVideoUtils.swift +@@ -9,7 +9,11 @@ enum RCTVideoAssetsUtils { + for mediaCharacteristic: AVMediaCharacteristic + ) async -> AVMediaSelectionGroup? { + if #available(iOS 15, tvOS 15, visionOS 1.0, *) { +- return try? await asset?.loadMediaSelectionGroup(for: mediaCharacteristic) ++ if let mediaSelectionGroup = try? await asset?.loadMediaSelectionGroup(for: mediaCharacteristic) { ++ return mediaSelectionGroup ++ } ++ ++ return nil + } else { + #if !os(visionOS) + return asset?.mediaSelectionGroup(forMediaCharacteristic: mediaCharacteristic) diff --git a/patches/react-native-webrtc+124.0.3.patch b/patches/react-native-webrtc+124.0.3.patch new file mode 100644 index 00000000000..6226b927f36 --- /dev/null +++ b/patches/react-native-webrtc+124.0.3.patch @@ -0,0 +1,143 @@ +diff --git a/node_modules/react-native-webrtc/lib/commonjs/MediaDevices.js b/node_modules/react-native-webrtc/lib/commonjs/MediaDevices.js +index 10a51e5..99428ad 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/MediaDevices.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/MediaDevices.js +@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + var _reactNative = require("react-native"); + var _getDisplayMedia = _interopRequireDefault(require("./getDisplayMedia")); + var _getUserMedia = _interopRequireDefault(require("./getUserMedia")); +diff --git a/node_modules/react-native-webrtc/lib/commonjs/MediaStream.js b/node_modules/react-native-webrtc/lib/commonjs/MediaStream.js +index 4c9653f..e142232 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/MediaStream.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/MediaStream.js +@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + var _reactNative = require("react-native"); + var _MediaStreamTrack = _interopRequireDefault(require("./MediaStreamTrack")); + var _RTCUtil = require("./RTCUtil"); +diff --git a/node_modules/react-native-webrtc/lib/commonjs/MediaStreamTrack.js b/node_modules/react-native-webrtc/lib/commonjs/MediaStreamTrack.js +index fb79282..9219abd 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/MediaStreamTrack.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/MediaStreamTrack.js +@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + var _reactNative = require("react-native"); + var _EventEmitter = require("./EventEmitter"); + var _Logger = _interopRequireDefault(require("./Logger")); +diff --git a/node_modules/react-native-webrtc/lib/commonjs/MediaStreamTrackEvent.js b/node_modules/react-native-webrtc/lib/commonjs/MediaStreamTrackEvent.js +index c90f7c3..e6105db 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/MediaStreamTrackEvent.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/MediaStreamTrackEvent.js +@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /** + * @eventClass +diff --git a/node_modules/react-native-webrtc/lib/commonjs/MessageEvent.js b/node_modules/react-native-webrtc/lib/commonjs/MessageEvent.js +index a4d4a53..e123aca 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/MessageEvent.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/MessageEvent.js +@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /** + * @eventClass +diff --git a/node_modules/react-native-webrtc/lib/commonjs/RTCDataChannel.js b/node_modules/react-native-webrtc/lib/commonjs/RTCDataChannel.js +index 51fc497..100f6d6 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/RTCDataChannel.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/RTCDataChannel.js +@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", { + }); + exports.default = void 0; + var base64 = _interopRequireWildcard(require("base64-js")); +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + var _reactNative = require("react-native"); + var _EventEmitter = require("./EventEmitter"); + var _MessageEvent = _interopRequireDefault(require("./MessageEvent")); +diff --git a/node_modules/react-native-webrtc/lib/commonjs/RTCDataChannelEvent.js b/node_modules/react-native-webrtc/lib/commonjs/RTCDataChannelEvent.js +index b41a908..9d99329 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/RTCDataChannelEvent.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/RTCDataChannelEvent.js +@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /** + * @eventClass +diff --git a/node_modules/react-native-webrtc/lib/commonjs/RTCErrorEvent.js b/node_modules/react-native-webrtc/lib/commonjs/RTCErrorEvent.js +index c62e943..e5e40b4 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/RTCErrorEvent.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/RTCErrorEvent.js +@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /** + * @brief This class Represents internal error happening on the native side as +diff --git a/node_modules/react-native-webrtc/lib/commonjs/RTCIceCandidateEvent.js b/node_modules/react-native-webrtc/lib/commonjs/RTCIceCandidateEvent.js +index b09fa22..7ba3927 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/RTCIceCandidateEvent.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/RTCIceCandidateEvent.js +@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /** + * @eventClass +diff --git a/node_modules/react-native-webrtc/lib/commonjs/RTCPeerConnection.js b/node_modules/react-native-webrtc/lib/commonjs/RTCPeerConnection.js +index 954e7e7..e55c9b4 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/RTCPeerConnection.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/RTCPeerConnection.js +@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + var _reactNative = require("react-native"); + var _EventEmitter = require("./EventEmitter"); + var _Logger = _interopRequireDefault(require("./Logger")); +diff --git a/node_modules/react-native-webrtc/lib/commonjs/RTCTrackEvent.js b/node_modules/react-native-webrtc/lib/commonjs/RTCTrackEvent.js +index 7c4b49e..228d917 100644 +--- a/node_modules/react-native-webrtc/lib/commonjs/RTCTrackEvent.js ++++ b/node_modules/react-native-webrtc/lib/commonjs/RTCTrackEvent.js +@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +-var _index = require("event-target-shim/index"); ++var _index = require("event-target-shim"); + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /** + * @eventClass diff --git a/scripts/build.sh b/scripts/build.sh index 9ee35228220..94c60fb5f31 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -85,8 +85,8 @@ function setup() { fi echo "Installing Fastane" - if !gem list bundler -i --version 2.3.26 > /dev/null 2>&1; then - gem install bundler --versio 2.3.26 + if !gem list bundler -i --version 2.5.11 > /dev/null 2>&1; then + gem install bundler --versio 2.5.11 fi cd fastlane && bundle install && cd .. || exit 1 fi diff --git a/scripts/bump.sh b/scripts/bump.sh index eb0669ad0f1..bf5bb514f2d 100755 --- a/scripts/bump.sh +++ b/scripts/bump.sh @@ -6,7 +6,7 @@ cd "$(dirname "$0")"/.. log () { echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)]" "$@"; } : "${BRANCH_TO_BUILD:=main}" -: "${PR_REVIEWERS:=mattermost/core-build-engineers}" +: "${PR_REVIEWERS:=mattermost/core-build-engineers,amyblais}" : "${BUMP_BUILD_NUMBER:=}" # You can optionally specify the BUILD_NUMBER variable for selecting the next build number # If you don't, then the Fastlane action will pick the next build number automatically : "${BUMP_VERSION_NUMBER:=}" # If enabled, you must populate the VERSION_NUMBER variable as well @@ -87,7 +87,7 @@ if [ -n "${CREATE_PR}" ]; then log "Creating PR" PR_TITLE="Bump app ${BUMP_BUILD_NUMBER:+build}${BUMP_VERSION_NUMBER:+${BUMP_BUILD_NUMBER:+ and }version} number" # We won't specify the milestone when opening the PR if either we're not bumping the version number, or if the milestone is not found - MILESTONE_FOUND=$(gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" --jq '.[] | .title' /repos/mattermost/mattermost-mobile/milestones | grep -E "^v${VERSION_NUMBER}$") + MILESTONE_FOUND=$(gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" --jq '.[] | .title' /repos/mattermost/mattermost-mobile/milestones | sed -n -E "s/^v${VERSION_NUMBER:-}$/yes/p") #shellcheck disable=SC2046 gh pr create \ --repo mattermost/mattermost-mobile \ diff --git a/scripts/mitmdump-flow-parsing.py b/scripts/mitmdump-flow-parsing.py new file mode 100644 index 00000000000..2ead3f4da53 --- /dev/null +++ b/scripts/mitmdump-flow-parsing.py @@ -0,0 +1,52 @@ +from mitmproxy.net.http.http1.assemble import assemble_request, assemble_response +from datetime import datetime +import math +from urllib.parse import urlsplit + +# Use a context manager to handle file operations +f = open('./flow-output.csv', 'w') + +def response(flow): + # Convert timestamps to milliseconds + req_ts = math.floor(flow.request.timestamp_start * 1000) + req_te = math.floor(flow.request.timestamp_end * 1000) + resp_ts = math.floor(flow.response.timestamp_start * 1000) + resp_te = math.floor(flow.response.timestamp_end * 1000) + + # Calculate total times + request_total_time = req_te - req_ts + response_total_time = resp_te - resp_ts + total_time = resp_te - req_ts + + # Convert timestamps to human-readable dates + req_ts_human = datetime.fromtimestamp(req_ts / 1000).strftime('%Y-%m-%d %H:%M:%S.%f') + req_te_human = datetime.fromtimestamp(req_te / 1000).strftime('%Y-%m-%d %H:%M:%S.%f') + resp_ts_human = datetime.fromtimestamp(resp_ts / 1000).strftime('%Y-%m-%d %H:%M:%S.%f') + resp_te_human = datetime.fromtimestamp(resp_te / 1000).strftime('%Y-%m-%d %H:%M:%S.%f') + + # Parse the URL to separate path and query string + url_parts = urlsplit(flow.request.path) + path = url_parts.path + query = url_parts.query + + # Format data as a comma-separated string + data = ( + f"{req_ts_human}," + f"{req_te_human}," + f"{request_total_time}," + f"{flow.request.method}," + f"{flow.request.host}," + f"{path}," + f"{query}," + f"{flow.response.status_code}," + f"{resp_ts_human}," + f"{resp_te_human}," + f"{response_total_time}," + f"{total_time}\n" + ) + + # need to figure out how to get the content-length header + # f"{flow.response.headers['Content-Length']}\n" + + # Write the formatted string to the file + f.write(data) diff --git a/scripts/postinstall.sh b/scripts/postinstall.sh index 92cf482d460..6b1c32812e6 100755 --- a/scripts/postinstall.sh +++ b/scripts/postinstall.sh @@ -34,4 +34,14 @@ if [ -z "$ASSETS" ]; then exit 1 else echo "Generating app assets" -fi \ No newline at end of file +fi + +SOUNDS="assets/sounds" +if [ -z "$SOUNDS" ]; then + echo "Sound assets not found" + exit 1 +else + echo "Copying sound assets for bundling" + mkdir -p "android/app/src/main/res/raw/" + cp $SOUNDS/* "android/app/src/main/res/raw/" +fi diff --git a/scripts/preinstall.sh b/scripts/preinstall.sh index f4436beec7d..d6962b124d6 100755 --- a/scripts/preinstall.sh +++ b/scripts/preinstall.sh @@ -11,12 +11,12 @@ function cocoapods() { } if [[ "$OSTYPE" == "darwin"* ]]; then - if !(gem list bundler -i --version 2.3.26) > /dev/null 2>&1; then + if !(gem list bundler -i --version 2.5.11) > /dev/null 2>&1; then echo "Installing Bundler" - gem install bundler --version 2.3.26 || exit 1 + gem install bundler --version 2.5.11 || exit 1 fi - if !(gem list cocoapods -i --version 1.14.3) > /dev/null 2>&1; then + if !(gem list cocoapods -i --version 1.15.2) > /dev/null 2>&1; then cocoapods fi fi \ No newline at end of file diff --git a/share_extension/components/channel_item/avatar/avatar.tsx b/share_extension/components/channel_item/avatar/avatar.tsx index bb450636736..e9340334ddb 100644 --- a/share_extension/components/channel_item/avatar/avatar.tsx +++ b/share_extension/components/channel_item/avatar/avatar.tsx @@ -1,9 +1,9 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {Image} from 'expo-image'; import React from 'react'; import {View} from 'react-native'; -import FastImage from 'react-native-fast-image'; import {buildAbsoluteUrl} from '@actions/remote/file'; import {buildProfileImageUrlFromUser} from '@actions/remote/user'; @@ -55,7 +55,7 @@ const Avatar = ({author, theme}: Props) => { if (pictureUrl && serverUrl) { const imgSource = {uri: buildAbsoluteUrl(serverUrl, pictureUrl)}; icon = ( - { return ( - {type === 'video' && <> diff --git a/share_extension/components/content_view/link_preview/index.tsx b/share_extension/components/content_view/link_preview/index.tsx index b37d5e2e038..030d60898ca 100644 --- a/share_extension/components/content_view/link_preview/index.tsx +++ b/share_extension/components/content_view/link_preview/index.tsx @@ -1,12 +1,12 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {Image} from 'expo-image'; import React, {useCallback, useEffect, useState} from 'react'; import {ActivityIndicator, type StyleProp, Text, View, type ViewStyle} from 'react-native'; -import FastImage from 'react-native-fast-image'; import CompassIcon from '@components/compass_icon'; -import fetchOpenGraph, {type OpenGraph} from '@share/open_graph'; +import {fetchOpenGraph, type OpenGraph} from '@utils/opengraph'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import {typography} from '@utils/typography'; @@ -81,8 +81,8 @@ const OpenGraphImage = ({style, theme, url}: OpenGraphImageProps) => { /> } {!error && - { const disabled = !serverUrl || !channelId || (!message && !files.length && !linkPreviewUrl) || globalError; - const onPress = useCallback(() => { + const onPress = useCallback(async () => { if (!serverUrl || !channelId || !userId) { return; } @@ -42,13 +43,18 @@ const PostButton = ({theme}: Props) => { } } - closeExtension({ - serverUrl, - channelId, - files, - message: text, - userId, - }); + const credentials = await getServerCredentials(serverUrl); + + if (credentials?.token) { + closeExtension({ + serverUrl, + token: credentials.token, + channelId, + files, + message: text, + userId, + }); + } }, [serverUrl, channelId, message, files, linkPreviewUrl, userId]); return ( diff --git a/share_extension/index.tsx b/share_extension/index.tsx index 836f8007878..f541d9cb07e 100644 --- a/share_extension/index.tsx +++ b/share_extension/index.tsx @@ -1,27 +1,27 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import MattermostShare, {type ShareExtensionDataToSend, type SharedItem} from '@mattermost/rnshare'; import {NavigationContainer} from '@react-navigation/native'; import {createStackNavigator} from '@react-navigation/stack'; import React, {useEffect, useMemo, useState} from 'react'; import {IntlProvider} from 'react-intl'; -import {Appearance, BackHandler, NativeModules} from 'react-native'; +import {Appearance, BackHandler} from 'react-native'; import {getDefaultThemeByAppearance} from '@context/theme'; import {DEFAULT_LOCALE, getTranslations} from '@i18n'; import {initialize} from '@init/app'; +import PerformanceMetricsManager from '@managers/performance_metrics_manager'; import {extractStartLink, isValidUrl} from '@utils/url'; import ChannelsScreen from './screens/channels'; import ServersScreen from './screens/servers'; import ShareScreen from './screens/share'; -const ShareModule: NativeShareExtension = NativeModules.MattermostShare; - const Stack = createStackNavigator(); -const closeExtension = (data: ShareExtensionDataToSend | null = null) => { - ShareModule.close(data); +const closeExtension = (data: ShareExtensionDataToSend | null) => { + MattermostShare.close(data); }; const ShareExtension = () => { @@ -64,16 +64,23 @@ const ShareExtension = () => { return data?.filter((i) => !i.isString) || []; }, [data]); + useEffect(() => { + // Since the share functionality inits the app, the init mark gets set + // at this point. Therefore, any check on load times after this is done + // over the wrong value. + PerformanceMetricsManager.skipLoadMetric(); + }, []); + useEffect(() => { initialize().finally(async () => { - const items = await ShareModule.getSharedData(); + const items = await MattermostShare.getSharedData(); setData(items); }); const backListener = BackHandler.addEventListener('hardwareBackPress', () => { - const scene = ShareModule.getCurrentActivityName(); + const scene = MattermostShare.getCurrentActivityName(); if (scene === 'ShareActivity') { - closeExtension(); + closeExtension(null); return true; } return false; diff --git a/share_extension/open_graph/index.ts b/share_extension/open_graph/index.ts deleted file mode 100644 index 465286df9bd..00000000000 --- a/share_extension/open_graph/index.ts +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import GenericClient from '@mattermost/react-native-network-client'; -import {decode} from 'html-entities'; - -export type OpenGraph = { - link: string; - title?: string; - imageURL?: string; - error?: any; -} - -const metaTags: Record = { - title: 'title', - description: 'description', - ogUrl: 'og:url', - ogType: 'og:type', - ogTitle: 'og:title', - ogDescription: 'og:description', - ogImage: 'og:image', - ogVideo: 'og:video', - ogVideoType: 'og:video:type', - ogVideoWidth: 'og:video:width', - ogVideoHeight: 'og:video:height', - ogVideoUrl: 'og:video:url', - twitterPlayer: 'twitter:player', - twitterPlayerWidth: 'twitter:player:width', - twitterPlayerHeight: 'twitter:player:height', - twitterPlayerStream: 'twitter:player:stream', - twitterCard: 'twitter:card', - twitterDomain: 'twitter:domain', - twitterUrl: 'twitter:url', - twitterTitle: 'twitter:title', - twitterDescription: 'twitter:description', - twitterImage: 'twitter:image', -}; - -const fetchRaw = async (url: string) => { - try { - const res = await GenericClient.get(url, { - headers: { - 'User-Agent': 'OpenGraph', - 'Cache-Control': 'no-cache', - Accept: '*/*', - Connection: 'keep-alive', - }, - }); - - if (!res.ok) { - return res; - } - - return res.data as any; - } catch (error: any) { - return {message: error.message}; - } -}; - -const fetchOpenGraph = async (url: string): Promise => { - const { - ogTitle, - ogImage, - } = metaTags; - - try { - const html = await fetchRaw(url); - let siteTitle = ''; - - const tagTitle = html.match( - /]*>[\r\n\t\s]*([^<]+)[\r\n\t\s]*<\/title>/gim, - ); - siteTitle = tagTitle[0].replace( - /]*>[\r\n\t\s]*([^<]+)[\r\n\t\s]*<\/title>/gim, - '$1', - ); - - const og = []; - const metas: any = html.match(/]+>/gim); - - // There is no else statement - /* istanbul ignore else */ - if (metas) { - for (let meta of metas) { - meta = meta.replace(/\s*\/?>$/, ' />'); - const zname = meta.replace(/[\s\S]*(property|name)\s*=\s*([\s\S]+)/, '$2'); - const name = (/^["']/).test(zname) ? zname.substr(1, zname.slice(1).indexOf(zname[0])) : zname.substr(0, zname.search(/[\s\t]/g)); - const valid = Boolean(Object.keys(metaTags).filter((m: any) => metaTags[m].toLowerCase() === name.toLowerCase()).length); - - // There is no else statement - /* istanbul ignore else */ - if (valid) { - const zcontent = meta.replace(/[\s\S]*(content)\s*=\s*([\s\S]+)/, '$2'); - const content = (/^["']/).test(zcontent) ? zcontent.substr(1, zcontent.slice(1).indexOf(zcontent[0])) : zcontent.substr(0, zcontent.search(/[\s\t]/g)); - og.push({name, value: content === 'undefined' ? null : content}); - } - } - } - - const result: OpenGraph = {link: url}; - const data = og.reduce( - (chain: any, meta: any) => ({...chain, [meta.name]: decode(meta.value)}), - {url}, - ); - - // Image - result.imageURL = data[ogImage] ? data[ogImage] : null; - - // Title - data[ogTitle] = data[ogTitle] ? data[ogTitle] : siteTitle; - - result.title = data[ogTitle]; - - return result; - } catch (error: any) { - return { - link: url, - error, - }; - } -}; - -export default fetchOpenGraph; diff --git a/share_extension/screens/share.tsx b/share_extension/screens/share.tsx index e06760225ea..918f8d2e6ed 100644 --- a/share_extension/screens/share.tsx +++ b/share_extension/screens/share.tsx @@ -3,10 +3,10 @@ import {withObservables} from '@nozbe/watermelondb/react'; import {useNavigation} from '@react-navigation/native'; +import {applicationName} from 'expo-application'; import React, {useEffect, useMemo} from 'react'; import {defineMessages, useIntl} from 'react-intl'; import {StyleSheet, View} from 'react-native'; -import DeviceInfo from 'react-native-device-info'; import {from as from$} from 'rxjs'; import DatabaseManager from '@database/manager'; @@ -19,6 +19,8 @@ import PostButton from '@share/components/header/post_button'; import {hasChannels} from '@share/queries'; import {setShareExtensionState, useShareExtensionServerUrl} from '@share/state'; +import type {SharedItem} from '@mattermost/rnshare'; + export const errorScreenMessages = defineMessages({ label: { id: 'share_extension.error_screen.label', @@ -68,7 +70,6 @@ const ShareScreen = ({hasChannelMemberships, initialServerUrl, files, linkPrevie }, [serverUrl]); useEffect(() => { - const applicationName = DeviceInfo.getApplicationName(); navigator.setOptions({ title: intl.formatMessage({ id: 'share_extension.share_screen.title', diff --git a/share_extension/state/index.ts b/share_extension/state/index.ts index e18c1a238a4..b9ea6e34d80 100644 --- a/share_extension/state/index.ts +++ b/share_extension/state/index.ts @@ -1,14 +1,23 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import MattermostShare, {type ShareExtensionDataToSend, type SharedItem} from '@mattermost/rnshare'; import {useEffect, useState} from 'react'; -import {NativeModules} from 'react-native'; import {BehaviorSubject} from 'rxjs'; -const ShareModule: NativeShareExtension = NativeModules.MattermostShare; +interface ShareExtensionState { + channelId?: string; + closeExtension: (data: ShareExtensionDataToSend|null) => void; + files: SharedItem[]; + globalError: boolean; + linkPreviewUrl?: string; + message?: string; + serverUrl?: string; + userId?: string; +} const defaultState: ShareExtensionState = { - closeExtension: ShareModule.close, + closeExtension: MattermostShare.close, channelId: undefined, files: [], globalError: false, diff --git a/share_extension/utils/index.ts b/share_extension/utils/index.ts index ad9887b0f77..bea417bd2c7 100644 --- a/share_extension/utils/index.ts +++ b/share_extension/utils/index.ts @@ -1,6 +1,8 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import type {SharedItem} from '@mattermost/rnshare'; + export function toFileInfo(f: SharedItem): FileInfo { return { post_id: '', diff --git a/test/file_transformer.js b/test/file_transformer.js deleted file mode 100644 index a9c8a322005..00000000000 --- a/test/file_transformer.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -const path = require('path'); - -module.exports = { - process(sourceText, sourcePath) { - return { - code: `module.exports = ${JSON.stringify(path.basename(sourcePath))};`, - }; - }, -}; diff --git a/test/intl-test-helper.tsx b/test/intl-test-helper.tsx index b424f7a1787..159295c14ca 100644 --- a/test/intl-test-helper.tsx +++ b/test/intl-test-helper.tsx @@ -2,11 +2,12 @@ // See LICENSE.txt for license information. import {DatabaseProvider} from '@nozbe/watermelondb/react'; -import {render} from '@testing-library/react-native'; +import {render, type RenderOptions} from '@testing-library/react-native'; import React, {type ReactElement} from 'react'; import {IntlProvider} from 'react-intl'; import {SafeAreaProvider} from 'react-native-safe-area-context'; +import ServerUrlProvider from '@context/server'; import {ThemeContext, getDefaultThemeByAppearance} from '@context/theme'; import {getTranslations} from '@i18n'; @@ -48,13 +49,13 @@ export function renderWithIntlAndTheme(ui: ReactElement, {locale = 'en', ...rend return render(ui, {wrapper: Wrapper, ...renderOptions}); } -export function renderWithEverything(ui: ReactElement, {locale = 'en', database, ...renderOptions}: {locale?: string; database?: Database; renderOptions?: any} = {}) { +export function renderWithEverything(ui: ReactElement, {locale = 'en', database, serverUrl, ...renderOptions}: {locale?: string; database?: Database; serverUrl?: string; renderOptions?: RenderOptions} = {}) { function Wrapper({children}: {children: ReactElement}) { if (!database) { return null; } - return ( + const wrapper = ( ); + + if (serverUrl) { + return ( + + {wrapper} + + ); + } + + return wrapper; } return render(ui, {wrapper: Wrapper, ...renderOptions}); diff --git a/test/mock_api_client.ts b/test/mock_api_client.ts new file mode 100644 index 00000000000..4e470f42f32 --- /dev/null +++ b/test/mock_api_client.ts @@ -0,0 +1,11 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import type {RequestOptions} from '@mattermost/react-native-network-client'; + +export const mockApiClient = { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + get: jest.fn((url: string, options?: RequestOptions) => ({status: 200, ok: true})), + // eslint-disable-next-line @typescript-eslint/no-unused-vars + post: jest.fn((url: string, options?: RequestOptions) => ({status: 200, ok: true})), +}; diff --git a/test/setup.ts b/test/setup.ts index eb39d8ba687..acb0f3b2c2d 100644 --- a/test/setup.ts +++ b/test/setup.ts @@ -5,11 +5,15 @@ import {setGenerator} from '@nozbe/watermelondb/utils/common/randomId'; import * as ReactNative from 'react-native'; -import 'react-native-gesture-handler/jestSetup'; import mockSafeAreaContext from 'react-native-safe-area-context/jest/mock'; import {v4 as uuidv4} from 'uuid'; -import type {ReadDirItem, StatResult} from 'react-native-fs'; +import 'react-native-gesture-handler/jestSetup'; +import '@testing-library/react-native/extend-expect'; + +import {mockApiClient} from './mock_api_client'; + +import type {RequestOptions} from '@mattermost/react-native-network-client'; // @ts-expect-error Promise does not exists in global global.Promise = jest.requireActual('promise'); @@ -18,12 +22,45 @@ setGenerator(uuidv4); require('isomorphic-fetch'); -const WebViewMock = () => { - return null; -}; +jest.mock('expo-application', () => { + return { + nativeApplicationVersion: '0.0.0', + nativeBuildVersion: '0', + applicationName: 'Mattermost', + applicationId: 'com.mattermost.rnbeta', + }; +}); + +jest.mock('expo-device', () => { + return { + deviceName: 'Device', + osName: 'Test', + osVersion: '0.0.0', + applicationId: 'com.mattermost.rnbeta', + isRootedExperimentalAsync: jest.fn().mockResolvedValue(false), + }; +}); -jest.mock('react-native-webview', () => ({ - WebView: WebViewMock, +jest.mock('expo-file-system', () => ({ + downloadAsync: jest.fn(() => Promise.resolve({md5: 'md5', uri: 'uri'})), + getInfoAsync: jest.fn(() => Promise.resolve({exists: true, md5: 'md5', uri: 'uri'})), + readAsStringAsync: jest.fn(() => Promise.resolve()), + writeAsStringAsync: jest.fn(() => Promise.resolve()), + deleteAsync: jest.fn(() => Promise.resolve()), + moveAsync: jest.fn(() => Promise.resolve()), + copyAsync: jest.fn(() => Promise.resolve()), + makeDirectoryAsync: jest.fn(() => Promise.resolve()), + readDirectoryAsync: jest.fn(() => Promise.resolve()), + createDownloadResumable: jest.fn(() => Promise.resolve()), + documentDirectory: 'file:///test-directory/', + cacheDirectory: 'file://test-cache-directory/', +})); + +jest.mock('expo-web-browser', () => ({ + openAuthSessionAsync: jest.fn().mockResolvedValue(({ + type: 'success', + url: 'mmauthbeta://callback?MMAUTHTOKEN=123&MMCSRF=456', + })), })); jest.mock('@nozbe/watermelondb/utils/common/randomId/randomId', () => ({})); @@ -97,7 +134,7 @@ jest.doMock('react-native', () => { Appearance: { getColorScheme: jest.fn().mockReturnValue('light'), }, - MattermostManaged: { + RNUtils: { getConstants: () => ({ appGroupIdentifier: 'group.mattermost.rnbeta', appGroupSharedDirectory: { @@ -105,17 +142,18 @@ jest.doMock('react-native', () => { databasePath: '', }, }), - }, - SplitView: { addListener: jest.fn(), removeListeners: jest.fn(), - isRunningInSplitView: jest.fn().mockReturnValue(() => ({isSplitView: false, isTablet: false})), - }, - Notifications: { + isRunningInSplitView: jest.fn().mockReturnValue({isSplit: false, isTablet: false}), + getHasRegisteredLoad: jest.fn().mockReturnValue({hasRegisteredLoad: false}), + setHasRegisteredLoad: jest.fn(), + getDeliveredNotifications: jest.fn().mockResolvedValue([]), removeChannelNotifications: jest.fn().mockImplementation(), removeThreadNotifications: jest.fn().mockImplementation(), removeServerNotifications: jest.fn().mockImplementation(), + + unlockOrientation: jest.fn(), }, APIClient: { getConstants: () => ({ @@ -184,17 +222,11 @@ jest.doMock('react-native', () => { jest.mock('react-native-vector-icons', () => { const React = jest.requireActual('react'); - const PropTypes = jest.requireActual('prop-types'); class CompassIcon extends React.PureComponent { render() { return React.createElement('Icon', this.props); } } - CompassIcon.propTypes = { - name: PropTypes.string, - size: PropTypes.number, - style: PropTypes.oneOfType([PropTypes.array, PropTypes.number, PropTypes.object]), - }; CompassIcon.getImageSource = jest.fn().mockResolvedValue({}); return { createIconSet: () => CompassIcon, @@ -203,60 +235,9 @@ jest.mock('react-native-vector-icons', () => { }; }); -jest.mock('react-native-fs', () => { - const RNFS = { - CachesDirectoryPath: 'root/cache', - DocumentDirectoryPath: 'root/files', - exists: async () => { - return true; - }, - unlink: async () => { - return true; - }, - mkdir: async () => { - return true; - }, - readDir: async (path: string): Promise => { - return [{ - ctime: undefined, - mtime: undefined, - name: 'testfile.test', - path, - size: 123, - isFile: () => true, - isDirectory: () => false, - }]; - }, - stat: async (path: string): Promise => ({ - name: 'test name', - path, - size: 123, - mode: 600, - ctime: 0, - mtime: 0, - originalFilepath: path, - isFile: () => true, - isDirectory: () => false, - }), - }; - - return RNFS; -}); - jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper'); jest.mock('../node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter'); -jest.mock('react-native-device-info', () => { - return { - getVersion: () => '0.0.0', - getBuildNumber: () => '0', - getModel: () => 'iPhone X', - hasNotch: () => true, - isTablet: () => false, - getApplicationName: () => 'Mattermost', - }; -}); - jest.mock('react-native-localize', () => ({ getTimeZone: () => 'World/Somewhere', getLocales: () => ([ @@ -312,6 +293,7 @@ jest.mock('react-native-navigation', () => { mergeOptions: jest.fn(), showOverlay: jest.fn(), dismissOverlay: jest.fn(), + updateProps: jest.fn(), }, }; }); @@ -343,6 +325,7 @@ jest.mock('react-native-notifications', () => { }), setBadgeCount: jest.fn(), }, + postLocalNotification: jest.fn((notification) => notification), }, }; }); @@ -365,7 +348,10 @@ jest.mock('@screens/navigation', () => ({ popToRoot: jest.fn(() => Promise.resolve()), dismissModal: jest.fn(() => Promise.resolve()), dismissAllModals: jest.fn(() => Promise.resolve()), + dismissAllModalsAndPopToScreen: jest.fn(), + dismissAllModalsAndPopToRoot: jest.fn(), dismissOverlay: jest.fn(() => Promise.resolve()), + dismissAllOverlays: jest.fn(() => Promise.resolve()), })); jest.mock('@mattermost/react-native-emm', () => ({ @@ -384,12 +370,44 @@ jest.mock('@mattermost/react-native-emm', () => ({ useManagedConfig: () => ({}), })); +jest.mock('@react-native-clipboard/clipboard', () => ({})); + +jest.mock('react-native-document-picker', () => ({})); + +jest.mock('@mattermost/react-native-network-client', () => ({ + getOrCreateAPIClient: (serverUrl: string) => ({client: { + baseUrl: serverUrl, + get: (url: string, options?: RequestOptions) => mockApiClient.get(`${serverUrl}${url}`, options), + post: (url: string, options?: RequestOptions) => mockApiClient.post(`${serverUrl}${url}`, options), + invalidate: jest.fn(), + }}), + RetryTypes: { + EXPONENTIAL_RETRY: 'exponential', + }, +})); + jest.mock('react-native-safe-area-context', () => mockSafeAreaContext); jest.mock('react-native-reanimated', () => require('react-native-reanimated/mock')); jest.mock('react-native-permissions', () => require('react-native-permissions/mock')); -declare const global: {requestAnimationFrame: (callback: any) => void}; +jest.mock('react-native-haptic-feedback', () => { + const RNHF = jest.requireActual('react-native-haptic-feedback'); + return { + ...RNHF, + trigger: () => '', + }; +}); + +declare const global: { + requestAnimationFrame: (callback: () => void) => void; + performance: { + now: () => number; + }; +}; + global.requestAnimationFrame = (callback) => { setTimeout(callback, 0); }; + +global.performance.now = () => Date.now(); diff --git a/test/test_helper.ts b/test/test_helper.ts index 0962b1e7dfd..286b94973b4 100644 --- a/test/test_helper.ts +++ b/test/test_helper.ts @@ -10,15 +10,15 @@ import nock from 'nock'; import Config from '@assets/config.json'; import {Client} from '@client/rest'; +import {ActionType} from '@constants'; +import {Ringtone} from '@constants/calls'; import {SYSTEM_IDENTIFIERS} from '@constants/database'; import {PUSH_PROXY_STATUS_VERIFIED} from '@constants/push_proxy'; import DatabaseManager from '@database/manager'; import {prepareCommonSystemValues} from '@queries/servers/system'; -import {generateId} from '@utils/general'; import type {APIClientInterface} from '@mattermost/react-native-network-client'; -const PASSWORD = 'password1'; const DEFAULT_LOCALE = 'en'; class TestHelper { @@ -51,8 +51,8 @@ class TestHelper { this.basicRoles = null; } - setupServerDatabase = async () => { - const serverUrl = 'https://appv1.mattermost.com'; + setupServerDatabase = async (url?: string) => { + const serverUrl = url || 'https://appv1.mattermost.com'; await DatabaseManager.init([serverUrl]); const {database, operator} = DatabaseManager.serverDatabases[serverUrl]!; @@ -112,6 +112,13 @@ class TestHelper { systems: [{id: SYSTEM_IDENTIFIERS.PUSH_VERIFICATION_STATUS, value: PUSH_PROXY_STATUS_VERIFIED}], }); + await operator.handlePosts({ + actionType: ActionType.POSTS.RECEIVED_NEW, + order: [this.basicPost!.id], + posts: [this.basicPost!], + prepareRecordsOnly: false, + }); + return {database, operator}; }; @@ -127,7 +134,23 @@ class TestHelper { }; generateId = () => { - return generateId(); + // implementation taken from http://stackoverflow.com/a/2117523 + let id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'; + id = id.replace(/[xy]/g, (c) => { + const r = Math.floor(Math.random() * 16); + let v; + + if (c === 'x') { + v = r; + } else { + // eslint-disable-next-line no-mixed-operators + v = (r & 0x3) | 0x8; + } + + return v.toString(16); + }); + + return id; }; createClient = () => { @@ -291,7 +314,7 @@ class TestHelper { return 'success' + this.generateId() + '@simulator.amazonses.com'; }; - fakePost = (channelId: string) => { + fakePost = (channelId: string, userId?: string): Post => { const time = Date.now(); return { @@ -301,6 +324,17 @@ class TestHelper { update_at: time, message: `Unit Test ${this.generateId()}`, type: '', + delete_at: 0, + edit_at: 0, + hashtags: '', + is_pinned: false, + metadata: {}, + original_id: '', + pending_post_id: '', + props: {}, + reply_count: 0, + root_id: '', + user_id: userId || this.generateId(), }; }; @@ -314,7 +348,7 @@ class TestHelper { }; }; - fakeTeam = () => { + fakeTeam = (): Team => { const name = this.generateId(); let inviteId = this.generateId(); if (inviteId.length > 32) { @@ -322,6 +356,7 @@ class TestHelper { } return { + id: this.generateId(), name, display_name: `Unit Test ${name}`, type: 'O' as const, @@ -334,6 +369,9 @@ class TestHelper { allow_open_invite: true, group_constrained: false, last_team_icon_update: 0, + create_at: 0, + delete_at: 0, + update_at: 0, }; }; @@ -361,11 +399,9 @@ class TestHelper { }; }; - fakeUser = () => { + fakeUser = (): UserProfile => { return { email: this.fakeEmail(), - allow_marketing: true, - password: PASSWORD, locale: DEFAULT_LOCALE, username: this.generateId(), first_name: this.generateId(), @@ -373,6 +409,31 @@ class TestHelper { create_at: Date.now(), delete_at: 0, roles: 'system_user', + auth_service: '', + id: this.generateId(), + nickname: '', + notify_props: this.fakeNotifyProps(), + position: '', + update_at: 0, + }; + }; + + fakeNotifyProps = (): UserNotifyProps => { + return { + channel: 'false', + comments: 'root', + desktop: 'default', + desktop_sound: 'false', + email: 'false', + first_name: 'false', + highlight_keys: '', + mention_keys: '', + push: 'default', + push_status: 'away', + calls_desktop_sound: 'true', + calls_mobile_notification_sound: '', + calls_mobile_sound: 'true', + calls_notification_sound: '', }; }; @@ -397,6 +458,10 @@ class TestHelper { channel: 'true', mention_keys: '', highlight_keys: '', + calls_desktop_sound: 'true', + calls_mobile_sound: '', + calls_notification_sound: Ringtone.Calm, + calls_mobile_notification_sound: '', }, last_picture_update: 0, position: '', @@ -665,6 +730,7 @@ class TestHelper { }; wait = (time: number) => new Promise((resolve) => setTimeout(resolve, time)); + tick = () => new Promise((r) => setImmediate(r)); } export default new TestHelper(); diff --git a/tsconfig.json b/tsconfig.json index 92431163fd8..5bf8e113af3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -53,7 +53,6 @@ "@i18n": ["app/i18n/index"], "@init/*": ["app/init/*"], "@managers/*": ["app/managers/*"], - "@notifications": ["app/notifications/index"], "@queries/*": ["app/queries/*"], "@screens/*": ["app/screens/*"], "@selectors/*": ["app/selectors/*"], @@ -65,7 +64,6 @@ "@test/*": ["test/*"], "@utils/*": ["app/utils/*"], "@websocket": ["app/client/websocket"], - "*": ["./*", "node_modules/*"], } }, "include": ["app/**/*", "share_extension/**/*", "test/**/*", "types/**/*"], diff --git a/types/api/channels.d.ts b/types/api/channels.d.ts index b176b15f0a8..1376f748d63 100644 --- a/types/api/channels.d.ts +++ b/types/api/channels.d.ts @@ -134,3 +134,32 @@ type ChannelMemberCountByGroup = { }; type ChannelMemberCountsByGroup = Record; + +type ChannelBookmarkType = 'link' | 'file'; + +type ChannelBookmark = { + id: string; + create_at: number; + update_at: number; + delete_at: number; + channel_id: string; + owner_id: string; + file_id?: string; + display_name: string; + sort_order: number; + link_url?: string; + image_url?: string; + emoji?: string; + type: ChannelBookmarkType; + original_id?: string; + parent_id?: string; +} + +type ChannelBookmarkWithFileInfo = ChannelBookmark & { + file?: FileInfo; +} + +type UpdateChannelBookmarkResponse = { + updated: ChannelBookmarkWithFileInfo; + deleted?: ChannelBookmarkWithFileInfo; +} diff --git a/types/api/config.d.ts b/types/api/config.d.ts index 567c53d85e6..29b95a32738 100644 --- a/types/api/config.d.ts +++ b/types/api/config.d.ts @@ -46,6 +46,7 @@ interface ClientConfig { EnableBanner: string; EnableBotAccountCreation: string; EnableChannelViewedMessages: string; + EnableClientMetrics?: string; EnableCluster: string; EnableCommands: string; EnableCompliance: string; @@ -119,6 +120,7 @@ interface ClientConfig { FeatureFlagAppsEnabled?: string; FeatureFlagCollapsedThreads?: string; FeatureFlagPostPriority?: string; + FeatureFlagChannelBookmarks?: string; ForgotPasswordLink?: string; GfycatApiKey: string; GfycatApiSecret: string; @@ -145,6 +147,7 @@ interface ClientConfig { MaxNotificationsPerChannel: string; MaxPostSize: string; MinimumHashtagLength: string; + MobileExternalBrowser: string; OpenIdButtonColor: string; OpenIdButtonText: string; PasswordEnableForgotLink: string; diff --git a/types/api/files.d.ts b/types/api/files.d.ts index 6bf3dac054c..3e5f4d48bc6 100644 --- a/types/api/files.d.ts +++ b/types/api/files.d.ts @@ -16,7 +16,7 @@ type FileInfo = { mime_type: string; mini_preview?: string; name: string; - post_id: string; + post_id?: string; size: number; update_at?: number; uri?: string; diff --git a/types/api/users.d.ts b/types/api/users.d.ts index 7f6b615f712..20a2880552f 100644 --- a/types/api/users.d.ts +++ b/types/api/users.d.ts @@ -19,6 +19,10 @@ type UserNotifyProps = { user_id?: string; push_threads?: 'all' | 'mention'; email_threads?: 'all' | 'mention'; + calls_desktop_sound: 'true' | 'false'; + calls_notification_sound: string; + calls_mobile_sound: 'true' | 'false' | ''; + calls_mobile_notification_sound: string; }; type UserProfile = { diff --git a/types/components/emoji.ts b/types/components/emoji.ts index ec117baf179..5a2c4e914f9 100644 --- a/types/components/emoji.ts +++ b/types/components/emoji.ts @@ -2,12 +2,12 @@ // See LICENSE.txt for license information. import type CustomEmojiModel from '@typings/database/models/servers/custom_emoji'; -import type {ImageStyles} from '@typings/global/styles'; +import type {ImageStyle} from 'expo-image'; import type {StyleProp, TextStyle} from 'react-native'; // The intersection of the image styles and text styles -type ImageStyleUniques = Omit -export type EmojiCommonStyle = Omit +type ImageStyleUniques = Omit +export type EmojiCommonStyle = Omit export type EmojiProps = { emojiName: string; @@ -15,7 +15,7 @@ export type EmojiProps = { literal?: string; size?: number; textStyle?: StyleProp; - imageStyle?: StyleProp; + imageStyle?: StyleProp; commonStyle?: StyleProp; customEmojis: CustomEmojiModel[]; testID?: string; diff --git a/types/database/database.ts b/types/database/database.ts index cc26b7fe977..3771a87e739 100644 --- a/types/database/database.ts +++ b/types/database/database.ts @@ -226,6 +226,10 @@ export type HandleChannelArgs = PrepareOnly & { channels?: Channel[]; }; +export type HandleChannelBookmarkArgs = PrepareOnly & { + bookmarks?: ChannelBookmarkWithFileInfo[]; +}; + export type HandleCategoryArgs = PrepareOnly & { categories?: Category[]; }; diff --git a/types/database/models/servers/channel.ts b/types/database/models/servers/channel.ts index 039a018e676..291e5fc1a7a 100644 --- a/types/database/models/servers/channel.ts +++ b/types/database/models/servers/channel.ts @@ -2,6 +2,7 @@ // See LICENSE.txt for license information. import type CategoryChannelModel from './category_channel'; +import type ChannelBookmarkModel from './channel_bookmark'; import type ChannelInfoModel from './channel_info'; import type ChannelMembershipModel from './channel_membership'; import type DraftModel from './draft'; @@ -59,6 +60,9 @@ declare class ChannelModel extends Model { /** drafts : All drafts for this channel */ drafts: Query; + /** bookmarks : All bookmaks for this channel */ + bookmarks: Query; + /** posts : All posts made in the channel */ posts: Query; diff --git a/types/database/models/servers/channel_bookmark.ts b/types/database/models/servers/channel_bookmark.ts new file mode 100644 index 00000000000..413f45b8264 --- /dev/null +++ b/types/database/models/servers/channel_bookmark.ts @@ -0,0 +1,74 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import type ChannelModel from './channel'; +import type FileModel from './file'; +import type UserModel from './user'; +import type {Model, Relation} from '@nozbe/watermelondb'; +import type {Associations} from '@nozbe/watermelondb/Model'; + +/** + * ChannelBookmark the bookmarks for a specific channel. + */ +declare class ChannelBookmarkModel extends Model { + /** table (name) : ChannelBookmark */ + static table: string; + + /** associations : Describes every relationship to this table. */ + static associations: Associations; + + /** create_at : The creation date for this channel bookmark */ + createAt: number; + + /** update_at : The timestamp to when this channel bookmark was last updated on the server */ + updateAt: number; + + /** delete_at : The deletion/archived date of this channel bookmark */ + deleteAt: number; + + /** channel_id : The channel to which this channel bookmark belongs. */ + channelId: string; + + /** owner_id : The user who created this channel bookmark */ + ownerId: string; + + /** file_id : The file that was bookmarked if of type file */ + fileId?: string; + + /** display_name : The channel bookmark display name (e.g. Important Document ) */ + displayName: string; + + /** sort_order : The channel bookmark sort order */ + sortOrder: number; + + /** link_url : The channel bookmark url if of type link */ + linkUrl?: string; + + /** image_url : The channel bookmark image url if of type link (optional) */ + imageUrl?: string; + + /** emoji : The channel bookmark emoji (optional) */ + emoji?: string; + + /** type : The channel bookmark type it can be link or file */ + type: ChannelBookmarkType; + + /** original_id : The channel bookmark original identifier before it was edited */ + originalId?: string; + + /** parent_id : The channel bookmark parent in case is nested */ + parentId?: string; + + /** channel : The CHANNEL to which this CHANNEL BOOKMARK belongs */ + channel: Relation; + + /** owner : The USER that created this CHANNEL BOOKMARK */ + owner: Relation; + + /** file : The FILE attached to this CHANNEL BOOKMARK */ + file: Relation; + + toApi(): ChannelBookmark; +} + +export default ChannelBookmarkModel; diff --git a/types/database/models/servers/draft.ts b/types/database/models/servers/draft.ts index 00356802318..3115645b5ea 100644 --- a/types/database/models/servers/draft.ts +++ b/types/database/models/servers/draft.ts @@ -27,6 +27,9 @@ declare class DraftModel extends Model { files: FileInfo[]; metadata?: PostMetadata; + + /** update_at : The timestamp to when this post was last updated on the server */ + updateAt: number; } export default DraftModel; diff --git a/types/database/raw_values.d.ts b/types/database/raw_values.d.ts index 5fd63f61a40..920b06b8da2 100644 --- a/types/database/raw_values.d.ts +++ b/types/database/raw_values.d.ts @@ -23,6 +23,7 @@ type Draft = { message?: string; root_id: string; metadata?: PostMetadata; + update_at: number; }; type MyTeam = { @@ -106,6 +107,7 @@ type RawValue = | Category | CategoryChannel | Channel + | ChannelBookmark | ChannelInfo | ChannelMember | ChannelMembership diff --git a/types/global/device.d.ts b/types/global/device.d.ts deleted file mode 100644 index 491099aacbc..00000000000 --- a/types/global/device.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -type SplitViewResult = { - isSplitView: boolean; - isTablet: boolean; -} diff --git a/types/global/share_extension.d.ts b/types/global/share_extension.d.ts deleted file mode 100644 index d6d8a31803a..00000000000 --- a/types/global/share_extension.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -interface NativeShareExtension { - close: (data: ShareExtensionDataToSend|null) => void; - getCurrentActivityName: () => string; - getSharedData: () => Promise; -} - -interface ShareExtensionDataToSend { - channelId: string; - files: SharedItem[]; - message: string; - serverUrl: string; - userId: string; -} - -interface SharedItem { - extension: string; - filename?: string; - isString: boolean; - size?: number; - type: string; - value: string; - height?: number; - width?: number; - videoThumb?: string; -} - -interface ShareExtensionState { - channelId?: string; - closeExtension: (data: ShareExtensionDataToSend | null) => void; - files: SharedItem[]; - globalError: boolean; - linkPreviewUrl?: string; - message?: string; - serverUrl?: string; - userId?: string; -} diff --git a/types/global/styles.ts b/types/global/styles.ts index 58d762b24f1..b5714ad2f6d 100644 --- a/types/global/styles.ts +++ b/types/global/styles.ts @@ -1,7 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. + import type {ImageStyle, TextStyle, ViewStyle} from 'react-native'; -import type {ImageStyle as FIImageStyle} from 'react-native-fast-image'; export type NamedStyles = { [P in keyof T]: ViewStyle | TextStyle | ImageStyle }; -export type ImageStyles = Intersection; diff --git a/types/global/svg.d.ts b/types/global/svg.d.ts deleted file mode 100644 index 1754b0ee1ea..00000000000 --- a/types/global/svg.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -declare module '*.svg' { - const content: any; - export default content; -} diff --git a/types/launch/index.ts b/types/launch/index.ts index 4dffb4d7194..b813e4369a8 100644 --- a/types/launch/index.ts +++ b/types/launch/index.ts @@ -8,6 +8,10 @@ export interface DeepLink { teamName: string; } +export interface DeepLinkServer { + serverUrl: string; +} + export interface DeepLinkChannel extends DeepLink { channelName: string; } @@ -34,7 +38,7 @@ export type DeepLinkType = typeof DeepLink[keyof typeof DeepLink]; export interface DeepLinkWithData { type: DeepLinkType; url: string; - data?: DeepLinkChannel | DeepLinkDM | DeepLinkGM | DeepLinkPermalink | DeepLinkPlugin; + data?: DeepLinkChannel | DeepLinkDM | DeepLinkGM | DeepLinkPermalink | DeepLinkPlugin | DeepLinkServer; } export type LaunchType = typeof Launch[keyof typeof Launch]; diff --git a/types/modules/react-native-incall-manager.d.ts b/types/modules/react-native-incall-manager.d.ts index 5c5960bf8c3..fd0450609d0 100644 --- a/types/modules/react-native-incall-manager.d.ts +++ b/types/modules/react-native-incall-manager.d.ts @@ -44,9 +44,9 @@ declare module 'react-native-incall-manager' { vibrate_pattern?: any[], ios_category?: string, seconds?: number - ): void; + ): Promise; - stopRingtone(): void; + stopRingtone(): Promise; startProximitySensor(): void; diff --git a/types/modules/react-native-keyboard-tracking-view.d.ts b/types/modules/react-native-keyboard-tracking-view.d.ts deleted file mode 100644 index cd1df1c4130..00000000000 --- a/types/modules/react-native-keyboard-tracking-view.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -declare module 'react-native-keyboard-tracking-view' { - import {ViewProps} from 'react-native'; - export interface KeyboardTrackingViewRef { - pauseTracking: (id: string) => void; - resumeTracking: (id: string) => void; - resetScrollView: (id: string) => void; - setNativeProps(nativeProps: object): void; - getNativeProps: () => Promise; - } - - type KeyboardTrackingViewNativeProps = { - contentTopInset: number; - keyboardHeight: number; - trackingViewHeight: number; - } - - interface KeyboardTrackingViewProps extends ViewProps{ - accessoriesContainerID?: string; - normalList?: boolean; - scrollViewNativeID?: string; - viewInitialOffsetY?: number; - } - export const KeyboardTrackingView: React.ForwardRefExoticComponent>; -} diff --git a/types/screens/emoji_selector.d.ts b/types/screens/emoji_selector.d.ts index 2914fc0aec2..7ff886cca01 100644 --- a/types/screens/emoji_selector.d.ts +++ b/types/screens/emoji_selector.d.ts @@ -14,6 +14,7 @@ type EmojiSection = { icon: string; id: string; key: string; + renderItem?: ({item}: ListRenderItemInfo) => JSX.Element; } type CategoryTranslation = { diff --git a/types/screens/gallery.ts b/types/screens/gallery.ts index 7aeb9b1c173..44cec0860d9 100644 --- a/types/screens/gallery.ts +++ b/types/screens/gallery.ts @@ -60,8 +60,10 @@ export type OnGestureEvent = ( event: T, ) => void; +export type GalleryFileType = 'image' | 'video' | 'file' | 'avatar'; + export type GalleryItemType = { - type: 'image' | 'video' | 'file' | 'avatar'; + type: GalleryFileType; id: string; width: number; height: number;